十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Mermaid 流程图连线交叉打结?ELK 算法布局调优完整指南

Mermaid 流程图连线交叉打结?ELK 算法布局调优完整指南 Mermaid 流程图连线交叉打结ELK 算法布局调优完整指南【免费下载链接】mermaidGeneration of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown项目地址: https://gitcode.com/GitHub_Trending/me/mermaid用 Mermaid 写流程图节点一多渲染出来的布局就容易翻车连线互相打结、节点挤成一团。Mermaid 是一个用类 Markdown 文本生成流程图、时序图等图表的工具而当图变大变复杂时把底层布局引擎切换到 ELK 算法往往能一次把可读性救回来。默认布局何时失守连线交叉与节点重叠Mermaid 默认使用 Dagre 来排布节点白话讲就是分层布局它把节点按依赖关系排进若干层同一层横向并排然后从上往下连。这种方式对一条主线加几个分支的小图非常友好快且零配置。但有三类场景它容易失守分支扇出太多一个节点向四个方向发散Dagre 的层内空间不够边开始绕行穿节点subgraph 嵌套较深分组框与跨组连线叠加线直接划过别的组存在回环状态会跳回前面的节点布局引擎为了断环可能把真正的入口节点排到图中间整张图从中间开始读顺序感全乱。这三种情况的共同表现就是流程图连线交叉严重、局部重叠读者被迫沿着线找路。为什么选 ELK它是一套布局工具箱而不是另一个 Dagre先解释一下术语。ELK 全称 Eclipse Layout Kernel是一个开源的图布局框架可以理解成一套统一接口、内置多种布局算法的工具箱。Mermaid 的 ELK 布局就构建在它之上相关实现位于仓库的 packages/mermaid-layout-elk/ 目录底层通过 elkjs 运行。它和 Dagre 的本质区别在于Dagre 是单一种算法而 ELK 让你按场景挑策略。目前 Mermaid 注册的布局名有elk默认等价于elk.layered分层布局也就是常说的 LAYERED——把同层节点排进同一层再逐层向下铺开最适合有明确先后顺序的流程、审批链、部署管线这类图elk.stress应力布局靠弹簧拉伸找平衡位置适合网状、对等结构elk.force力导向布局观感更有机的适合没有强层次关系的关系图elk.mrtree/elk.sporeOverlap多根树、Spore 布局面向特定形态的图。所以官方文档里的定位也很直接elk 渲染器更适合更大、更复杂的图。它不是要取代 Dagre而是给复杂场景多一个出口。flowchart-elk 一步启用三种方式任选方式一改一行图头。在 Markdown 或任何支持 Mermaid 的编辑器里把flowchart TD换成flowchart-elk TD即可下面的语法完全不用动flowchart-elk TD ORDER[订单创建] -- PAY{支付成功?} PAY --|是| FULFILL[拣货发货] PAY --|否| RETRY[推送催付] RETRY -- PAY FULFILL -- DONE((完成))方式二用 frontmatter 按图配置。不想改图头时可以在图的配置区声明布局还能顺带指定非默认算法--- config: layout: elk --- flowchart TD ORDER -- PAY把layout改成elk.stress、elk.force等就能用对应的算法渲染同一张图。方式三Web 项目里注册外部布局模块。如果你的站点自己打包 Mermaid装一个包、注册一次即可import mermaid from mermaid; import elkLayouts from mermaid-js/layout-elk; mermaid.registerLayoutLoaders(elkLayouts);注册后页面上写flowchart-elk就自动生效ELK 引擎是按需加载的没用到时不会增加额外体积。可以在 demos/flowchart-elk.html 里直接看到注册后的实际效果。ELK 布局配置三个最值得先动的参数ELK 的参数很多新手只需先认识这几个均在config.elk下默认值可查 packages/mermaid/src/defaultConfig.ts方向直接沿用图里的 direction 语句TD/TB向下、BT向上、LR向右按阅读习惯选即可一般不用单独折腾mergeEdges默认关闭允许多条边共享路径。看起来更整洁但单条线更难辨认——同一对节点之间连了很多线时再开nodePlacementStrategy默认BRANDES_KOEPF控制同层节点的横向对齐方式可选SIMPLE、NETWORK_SIMPLEX、LINEAR_SEGMENTS、BRANDES_KOEPF。嫌层内参差可试换LINEAR_SEGMENTS对比效果keepEntryNodeOnTop默认关闭专门治回环图的入口跑到中间问题。开启后每个循环子流程的入口节点会被固定在首层保证图从入口读起。上一节示例里RETRY -- PAY的回环就是它的应用场景。另外一个细节ELK 渲染包内部的基础间距是主图 40、子图内 30节点之间默认留白并不小。如果还是显得拥挤优先考虑把同类节点收进 subgraph 分组而不是逐个调参。复杂场景避坑子图、回环与大图性能先分组再调参ELK 会整体排布每个 subgraph 再落位图乱的根源往往是结构没分层。把订单域库存域这类逻辑单元先框出来收益通常大于任何参数微调。跨组连线要克制跨子图跳线会明显拉长路径写图时就减少跨域依赖比事后优化更省事。回环图记得开keepEntryNodeOnTop避免阅读顺序错乱。大图别硬堆节点ELK 的分层算法开销随节点数上升几百节点的大图正确姿势是把细节折叠进子图、必要时拆图而不是继续往一张图里塞。一个前提要清楚ELK 渲染器在官方文档中仍标注为实验特性且各第三方平台不一定内置——自建站点必须自己安装mermaid-js/layout-elk否则写了flowchart-elk也不会生效。选型建议与资源入口一句话选型十几个节点以内、单向流程为主留在 Dagre它最快、零配置性能优势明显分支多、有 subgraph 嵌套、存在回环的复杂图切到flowchart-elk想要网状、有机观感时再试elk.stress或elk.force。延伸阅读均为本仓库内路径流程图语法与 elk 渲染器说明docs/syntax/flowchart.mdELK 演示页demos/flowchart-elk.htmlELK 布局实现源码packages/mermaid-layout-elk/全局配置默认值含elk段packages/mermaid/src/defaultConfig.ts图能读通就是好图小图信任默认复杂图交给 ELK。【免费下载链接】mermaidGeneration of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown项目地址: https://gitcode.com/GitHub_Trending/me/mermaid创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表