< 返回版块

Mike Tang 发表于 2026-01-25 12:55

mmdr - 超快速 Mermaid 图表渲染器总结

核心特点

mmdr 是一个纯 Rust 实现的 Mermaid 图表渲染工具,性能比官方 mermaid-cli 快 500-1000倍,无需浏览器依赖。

性能对比

图表类型 mmdr mermaid-cli 加速比
流程图 2.75ms 2,636ms 958倍
类图 3.19ms 2,381ms 746倍
状态图 2.45ms 2,647ms 1,080倍
时序图 2.47ms 2,444ms 990倍

为什么这么快?

  • mermaid-cli: 每次渲染都启动 Chromium 浏览器,有 2-3 秒启动开销
  • mmdr: 纯 Rust 原生解析和渲染,直接输出 SVG/PNG,无浏览器、Node.js、Puppeteer

实际应用场景对比

  • 50 个图表的 CI/CD: mermaid-cli ~2分钟 vs mmdr <1秒
  • 实时编辑器预览: mermaid-cli 卡顿 vs mmdr 即时响应

安装方式

cargo install --path .           # 源码安装
brew install mmdr                # macOS/Linux
scoop install mmdr               # Windows
yay -S mmdr-bin                  # Arch Linux

快速使用

echo 'flowchart LR; A-->B-->C' | mmdr -e svg
mmdr -i diagram.mmd -o output.svg -e svg
mmdr -i README.md -o ./diagrams/ -e svg

支持的功能

  • 图表类型: 流程图、类图、状态图、时序图
  • 节点形状: 矩形、圆角、菱形、六边形、圆柱等 12+ 种
  • 边样式: 实线、虚线、粗线、带标签、多种箭头装饰
  • 高级特性: 子图、嵌套、样式定制、主题配置

技术实现

纯 Rust 管道: 解析 → 中间表示 → 布局(dagre算法) → 渲染SVG → 转PNG

https://github.com/1jehuang/mermaid-rs-renderer

Succinctly:基于简洁数据结构的快速 jq/yq 替代工具

一位开发者发布了用 Rust 编写的 Succinctly 项目,这是一个使用简洁数据结构(通过 rank/select 半索引技术)实现 jq 和 yq 功能的库和 CLI 工具。

主要特性

已实现功能:

  • 支持大多数 jq 和 yq 查询模式(reduce、limit、recurse、regex、路径函数等)
  • JSON 解析速度约 880 MiB/s,YAML 解析速度约 250-400 MiB/s
  • 支持基于位置的导航功能,可用于 IDE 集成

尚未实现:

  • input/inputs(从标准输入流式处理多个 JSON 值)
  • 超过内存大小的文件流式处理
  • 部分高级 YAML 边缘情况

性能对比

vs jq(AMD Ryzen 9 7950X):

  • 速度提升 1.7-1.8倍
  • 内存使用仅为 jq 的 7-30%(100MB 文件仅用 104MB vs 1GB)

vs yq(Apple M1 Max):

  • 速度提升 7-10倍
  • 内存使用仅为 yq 的 9-16%(100MB 文件仅用 573MB vs 6GB)

技术亮点

  • 硬件优化:x86_64 使用 AVX2 SIMD、POPCNT、BMI2;ARM 使用 NEON 指令
  • 简洁数据结构:通过在原始文本上创建轻量级索引而非完整 DOM,实现 O(1) 节点导航,内存占用降低 6-10倍
  • 支持 no_std 环境

项目已在 GitHub 和 Crates.io 开源,开发者欢迎反馈和 bug 报告。

https://old.reddit.com/r/rust/comments/1qleizg/succinctly_a_fast_jqyq_alternative_built_on/

jbundle:用 Rust 打包 JVM 应用的命令行工具

项目背景

一位开发者用 Rust 开发了一个工具,解决了 Java 生态系统中的一个痛点:如何在目标机器上分发 JVM 应用而无需预装 Java

解决的问题

  • 传统方案是使用 GraalVM native-image,但存在诸多问题:
    • 反射配置复杂
    • 库兼容性问题
    • 编译时间超过 10 分钟
  • 大多数开发者最后只能分发 JAR 文件,并附带"请安装 Java 21"的说明

解决方案

jbundle 采用不同方法:

  • 将 JAR 文件 + 精简的 JVM 运行时(通过 jlink 创建)打包成单个自解压可执行文件
  • 无需 AOT 编译,无需反射配置,100% JVM 兼容
  • 最终生成 30-50 MB 的单个二进制文件

为什么选择 Rust

  • 速度快:打包仅需几秒钟
  • 无运行时依赖:单个静态二进制文件
  • 跨平台:支持 Linux x64/ARM64、macOS x64/ARM64

技术亮点

  • 多层二进制格式,带内容哈希缓存
  • 类似 rustc 风格的结构化错误诊断
  • 使用 flate2 压缩、reqwest 下载 JDK、clap 处理 CLI
  • 约 2500 行 Rust 代码

项目状态

  • 目前缺少 Windows 支持
  • 欢迎贡献和代码结构反馈
  • GitHub: https://github.com/avelino/jbundle

https://old.reddit.com/r/rust/comments/1qm43ge/jbundle_a_rust_cli_to_package_jvm_apps_into/

--

From 日报小组 Mike

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页