Mermaid vs PlantUML 时序图对比:语法差异、示例与选型
本文只关注时序图本身的图形表达能力。 至于 Markdown 支持、文档平台集成、生态插件、渲染服务这些整体工具差异,本文不会展开,相关内容可以看系列总览:Mermaid vs PlantUML:2026 年该选哪个图表即代码工具?。
在这个前提下,结论其实很直接:日常 90% 的时序图需求,两者都能完成。PlantUML 的时序图能力更丰富,但大多数普通交互图不会用到那些高级能力;只从图形表达看,Mermaid 和 PlantUML 的基础差异并不大。
它们都能用文本描述系统交互顺序,也都支持常见的 alt、loop、par、activation、note 和 actor。真正影响图形效果的,通常不是“谁能不能画条件分支”,而是这张图是否需要更明确的返回语义、更细的参与者类型、更复杂的生命周期、更自然的片段引用,或者更适合长流程拆页。
更准确的判断是:
Mermaid 胜在表达直接。 对常见的请求链路、业务分支、并行处理和简短调用栈来说,它的语法足够清楚,画出来的图也容易阅读。只要图没有复杂的返回层级、对象生命周期或跨阶段分页,Mermaid 通常不会成为表达瓶颈。
PlantUML 胜在语义更细。 它不是因为 alt、loop 这些基础语法更强,而是因为它对返回语义、参与者类型、自动激活、分页、引用片段和图形样式有更完整的支持,更适合表达调用栈深、阶段多、生命周期复杂的时序图。
所以这篇文章不会重复 Mermaid vs PlantUML 总览里已经讨论过的内容,比如 Markdown 友好度、工具接入方式、团队协作成本等。下面只比较它们在时序图图形能力上的差异。
本文基于官方文档整理,并配合具体案例对比代码和图形效果:
Mermaid vs PlantUML 时序图核心差异
| 对比点 | Mermaid | PlantUML | 选择建议 |
|---|---|---|---|
| 基础消息 | 支持 | 支持 | 两者都可以 |
alt / opt / loop | 支持 | 支持 | 不要因为条件分支就默认 PlantUML |
par 并行 | 支持 | 支持 | 两者都可以 |
| activation | 支持 activate/deactivate 和 +/- | 支持 activate/deactivate、++/--、autoactivate | PlantUML 更适合复杂调用栈 |
| actor 创建/销毁 | 支持 create / destroy | 支持 create、destroy、**、!! | 两者都能表达生命周期 |
| 分组 | 支持 box | 支持 box、group、ref over 等 | PlantUML 更适合可复用的设计片段 |
| 返回语义 | 通常手写返回箭头 | 支持 return label | PlantUML 更清楚 |
| 长图分页 | 不突出 | 支持 newpage | 长文档 PlantUML 更合适 |
| 标题/页眉/页脚 | 基础能力有限 | 支持 title、header、footer | 正式图形输出 PlantUML 更合适 |
| 样式控制 | 适合基础主题 | skinparam 和样式能力成熟 | 需要统一图形规范时 PlantUML 更合适 |
先给一句话结论:
Mermaid 在时序图基础能力上已经很完整;PlantUML 的优势主要是更细的图形语义和长图组织能力,而不是基础控制语法。
Mermaid 也可以支持复杂逻辑图形
很多人以为 Mermaid 一复杂就不行,尤其是看到 alt、loop、par 就转向 PlantUML。这个判断并不准确。Mermaid 官方时序图支持 alt、opt、loop、par、critical、break 等控制片段,足以覆盖大多数业务流程说明。
下面是一个支付流程:有库存则扣款,支付成功写订单并发消息,支付失败释放库存;没有库存则直接返回。
Mermaid 代码和图
sequenceDiagram
autonumber
actor User
participant Web
participant API
participant Inventory
participant Payment
participant DB
participant Queue
participant Email
User->>Web: Submit order
Web->>API: POST /orders
activate API
API->>Inventory: Reserve items
alt items available
Inventory-->>API: Reserved
API->>Payment: Charge card
alt payment success
Payment-->>API: Payment confirmed
API->>DB: Save paid order
API->>Queue: Publish OrderPaid
Queue-->>Email: Send confirmation
API-->>Web: Show success
else payment failed
Payment-->>API: Payment declined
API->>Inventory: Release items
API-->>Web: Show payment error
end
else out of stock
Inventory-->>API: Not available
API-->>Web: Show out of stock
end
deactivate API
PlantUML 代码和图
@startuml
autonumber
actor User
participant "Web App" as Web
participant "Order API" as API
participant "Inventory Service" as Inventory
participant "Payment Service" as Payment
database "Database" as DB
queue "Message Queue" as Queue
participant "Email Service" as Email
User -> Web: Submit order
Web -> API: POST /orders
activate API
API -> Inventory: Reserve items
alt items available
Inventory --> API: Reserved
API -> Payment: Charge card
alt payment success
Payment --> API: Payment confirmed
API -> DB: Save paid order
API -> Queue: Publish OrderPaid
Queue -> Email: Send confirmation
API --> Web: Show success
else payment failed
Payment --> API: Payment declined
API -> Inventory: Release items
API --> Web: Show payment error
end
else out of stock
Inventory --> API: Not available
API --> Web: Show out of stock
end
deactivate API
@enduml
Mermaid 也可以清楚展示完整的时序流程。它并不只适合简单图;对于常见的多分支、多参与者流程,Mermaid 的表达能力已经足够好。
PlantUML 可以更显式地展示角色类型
再看一个最常见的时序图场景:用户点击 checkout,Web 调用 API,API 写数据库,然后返回成功。这个例子能说明两者在参与者类型表达上的差异。
Mermaid 代码和图
sequenceDiagram
actor User
participant Web
participant API
participant DB
User->>Web: Click checkout
Web->>API: POST /orders
API->>DB: Insert order
DB-->>API: Order saved
API-->>Web: 201 Created
Web-->>User: Show confirmation
PlantUML 代码和图
@startuml
actor User
participant "Web App" as Web
participant "Order API" as API
database "Database" as DB
User -> Web: Click checkout
Web -> API: POST /orders
API -> DB: Insert order
DB --> API: Order saved
API --> Web: 201 Created
Web --> User: Show confirmation
@enduml
PlantUML 的优势在于角色类型更显式,例如
database "Database" as DB。当读者需要一眼区分服务、数据库、队列、边界系统时,这种图形语义会更有价值。
PlantUML 有更好的长图组织能力
PlantUML 在时序图上真正拉开差距的地方,是长图组织和精确语义。下面这个例子包含几个 Mermaid 不太适合表达或不够自然的点:ref over 引用片段、return 返回语义、newpage 分页、title 和 footer。
PlantUML 代码和图
@startuml
title Checkout Sequence
footer OnUML Architecture Review - Sequence Diagram
autonumber
autoactivate on
actor User
participant "Web App" as Web
participant "Order API" as API
participant "Payment Service" as Payment
database "Database" as DB
User -> Web: Submit order
Web -> API: POST /orders
ref over API, Payment
Shared payment authorization flow
end ref
API -> Payment: Authorize payment
return Authorization result
alt authorized
API -> DB: Save paid order
return Order id
API --> Web: Show success
else declined
API --> Web: Show payment error
end
newpage Fulfillment handoff
API -> DB: Load order
return Order details
API --> Web: Show fulfillment status
@enduml
Mermaid 近似表达
sequenceDiagram
autonumber
actor User
participant Web
participant API
participant Payment
participant DB
User->>Web: Submit order
Web->>API: POST /orders
Note over API,Payment: Shared payment authorization flow
API->>Payment: Authorize payment
Payment-->>API: Authorization result
alt authorized
API->>DB: Save paid order
DB-->>API: Order id
API-->>Web: Show success
else declined
API-->>Web: Show payment error
end
Note over API,Web: Fulfillment handoff starts here
API->>DB: Load order
DB-->>API: Order details
API-->>Web: Show fulfillment status
为什么这个场景更适合 PlantUML?
Mermaid 可以近似表达这张图,但语义不同:
- Mermaid 用
Note over模拟引用片段,PlantUML 有ref over,更像正式 UML 片段引用。 - Mermaid 通常用返回箭头写
Payment-->>API,PlantUML 的return会回到最近一次 activation 的调用点,语义更明确。 - Mermaid 没有同等自然的
newpage长图分页能力,PlantUML 更适合把一个长流程拆成多个连续页面。 - PlantUML 的
title、footer、skinparam更适合控制图形输出的标题、页脚和整体样式。
这就是 PlantUML 在时序图里的真正优势:不是能不能画出条件分支,而是能不能把长流程、深调用栈和可复用片段表达得更清楚。
时序图选择建议
选 Mermaid 写时序图,如果这张图的重点是:
- 展示一次 API 请求链路。
- 说明一个业务分支,例如支付成功/失败。
- 展示简单并行处理,例如库存、风控、配送同时检查。
- 让读者快速理解交互顺序。
- 图不会特别长,最好控制在一个屏幕或少量滚动内。
选 PlantUML 写时序图,如果这张图的重点是:
- 展示多层调用栈,并且返回关系很重要。
- 需要把某段交互标成
ref over引用片段。 - 一张图要分阶段导出,适合使用
newpage。 - 需要表现对象创建、销毁、自动激活和复杂生命周期。
- 时序图需要稳定的标题、页脚、编号和样式输出。
常见问题
Mermaid 时序图支持 alt 吗?
支持。Mermaid 官方时序图支持 alt、opt、loop、par、critical、break 等控制片段。不要因为图里有条件分支,就直接判断 Mermaid 不够用。
PlantUML 时序图一定比 Mermaid 更适合复杂流程吗?
不一定。如果复杂只是指“分支多一点、参与者多一点”,Mermaid 也能完成。PlantUML 更适合的是另一类复杂:返回关系很重要、调用栈较深、需要 ref over 引用片段、需要 newpage 分页,或者要放进架构评审和设计归档材料。
只看图形能力,Mermaid 和 PlantUML 怎么选?
如果图的重点是请求链路、业务分支、简单并行和中短流程,Mermaid 通常就够了。如果图的重点是深调用栈、明确返回、对象生命周期、引用片段、分页或统一样式,PlantUML 更稳。
最终结论:
在时序图这一项上,Mermaid 和 PlantUML 的基础能力非常接近。Mermaid 更适合短到中等长度的交互说明;PlantUML 更适合返回关系复杂、生命周期复杂、需要引用片段或分页的正式时序图。
你可以在 OnUML 编辑器 中分别使用 Mermaid 和 PlantUML 模式,把上面的示例复制进去对比效果。