Rust 引擎是一个可选的高性能执行引擎。它加速大型文档项目中繁重的 I/O 工作负载。通过 N-API 使用原生二进制文件,它绕过标准事件循环限制,实现多线程文件读取和子进程编排。
作为实验性预览提供,Rust 引擎面向企业规模。它在数千个 Markdown 文件和详尽的 Git 日志引入编译瓶颈时表现出色。
配置
要激活原生 Rust 加速,在 docmd.config.json 文件中将 engine 指令配置为 "rust"。
{
"title": "全球 API 注册表",
"engine": "rust",
"src": "docs",
"out": "site"
}
理想用例和优势
Rust 引擎解决特定的编译瓶颈。在以下场景下它提供出色的效率提升:
- 大型仓库(1,000+ 文件):单体项目从通过 Tokio 编排的异步并行文件系统访问中获益巨大。
- 密集的 Git 元数据提取:跨数百个页面提取深层提交日志需要大量子进程生成。Rust 引擎处理
git:log任务的速度比 JavaScript 快约 1.24 倍。 - CI/CD 中的冷构建加速:在磁盘缓存不可用的环境中,原始文件读取吞吐量可减少总处理时间。实际基准测试显示冷构建速度提升约 25%,热构建改善约 17%。
支持的设备和平台包
引擎执行预编译的机器码。它需要专用的原生二进制文件,这些文件针对你的目标主机架构进行了定制。基础的 @docmd/engine-rust 包在启动时自动延迟加载正确的平台二进制文件。
目前分发以下平台包:
| 平台包 | 目标架构 | 主机操作系统 |
|---|---|---|
@docmd/engine-rust-darwin-arm64 |
ARM64(Apple Silicon) | macOS |
@docmd/engine-rust-darwin-x64 |
x64(Intel) | macOS |
@docmd/engine-rust-linux-x64-gnu |
x64 | Linux(glibc 环境) |
@docmd/engine-rust-linux-arm64-gnu |
ARM64 | Linux(glibc 环境) |
@docmd/engine-rust-win32-x64-msvc |
x64 | Windows |
如果你的环境缺少可用的预构建二进制文件,引擎会记录一条非致命通知并自动降级到高性能 JavaScript 引擎。你的构建保持完全确定性。
功能和战略限制
为了实现最大效用,你必须了解其架构权衡。引擎擅长 I/O 密集型操作,但在跨边界序列化期间会产生开销。
| 功能 / 任务 | Rust 引擎性能配置文件 | 架构评估 |
|---|---|---|
| 批量文件发现和读取 | 通过并行 Tokio 工作线程加速。 | ✅ 对大型目录非常有效。 |
| Git 提交日志提取 | 快速子进程编排,绕过 Node 事件循环。 | ✅ 对冷启动 Git 元数据提取非常出色。 |
| 持久磁盘缓存 | 原生支持锚定磁盘缓存以消除冗余读取。 | ✅ 对热构建非常有效。 |
| CPU 密集型搜索索引 | 比原生 JavaScript JIT 更慢。 | ❌ 由于双重序列化开销而效率低下。 |
双重序列化税的解释
docmd 核心编排器与原生 Rust 引擎之间的通信依赖于跨 N-API 运行时边界传递的字符串化 JSON:
JS Worker → JSON.stringify() → NAPI Boundary → Serde Deserialisation → [Rust Task] → Serde Serialisation → NAPI Boundary → JSON.parse()
对于 I/O 密集型操作(如查询 Git 历史或读取磁盘缓冲区),节省的处理时间远超字符串转换成本。
然而,对于高度迭代的 CPU 密集型任务(如全文搜索索引 search:index),序列化往返消耗的 CPU 资源比底层任务本身更多。来回序列化大型内容数组会导致 Rust 实现比 Node 的原生 JIT 字符串操作运行得更慢。
因此,JavaScript 引擎仍然是语义搜索管道的推荐运行时。有选择地为大规模 Git 和文件管理工作负载启用 Rust 引擎。