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
社区学习交流平台订阅:
评论区
写评论还没有评论