pnpm 核心团队正在为 v12 版本推出基于 Rust 的重写,将热安装(warm install)时间从 381 ms 大幅缩减至 12 ms,并将清洁安装(clean install)时间从 6.5 s 缩减至 2.2 s。对于在持续集成(CI)流水线中运行包的开发者来说,这种速度提升至关重要,因为在 CI 环境中,每一秒的节省都能累积成巨大的效率提升。

为什么这次重写至关重要

pnpm 在速度上已经超越了许多竞争对手,但它运行在 Node.js 之上,这导致每次启动命令时都会产生启动成本。这种成本在反复获取和链接依赖项的 CI 任务中表现为明显的停顿。通过将核心重型任务移至一个原生的 Rust 二进制文件(代号为 pacquet),团队消除了 Node.js 的引导过程,并让 Rust 能够通过单线程处理大规模的文件系统变动。

此次重写是移植而非重新设计。所有的 flags、lockfile 格式以及熟悉的 node_modules 布局都保持完全一致,因此现有的脚本和工作流无需任何更改。在 v11 中,你已经可以选择使用 pacquet 后端;而在 v12 中,它将成为获取(fetching)和链接(linking)阶段的默认后端。

可衡量的性能提升

维护者提供的基准测试显示:

  • 热安装(使用缓存的重复运行):381 ms → 12 ms,提升了 30 倍。
  • 清洁安装(无缓存):6.5 s → 2.2 s,缩短了一半以上的时间。

风险与权衡

Rust 引擎仍处于 alpha 阶段。团队建议在它走出预发布阶段之前,不要在生产环境中使用 v12。

如何立即体验

开发者可以通过运行 pnpm self-update next-12 来测试新的后端,该命令会拉取最新的预发布二进制文件。该命令会在不改变项目的 pnpm-lock.yamlnode_modules 布局的情况下,将 JavaScript 引擎替换为 Rust 引擎。想要评估其对 CI 流水线影响的团队,应当启动一个临时的 runner,启用 pacquet 后端,并将构建时间与当前设置进行对比。

更广泛的趋势

pnpm 的这一举动反映了工具向编译型语言迁移的大趋势。像 Biome、Oxc 和 Deno 这样的项目都已使用 Rust 或 Go 重构了性能关键组件,以降低开发者工作流中的延迟。

后续关注点

  • 稳定性里程碑:通过关注发布版本来判断何时可以安全用于生产。
  • 功能对齐:用户应关注更新日志(changelog)以查看是否存在功能缺失。

总而言之:pnpm 的 Rust 重写将一个本就快速的包管理器变成了在重复安装时几乎瞬时的工具,并为全新安装缩短了一半以上的时间。对于每晚都要花费数分钟进行依赖解析的团队来说,这次升级有望在无需大规模重构工作流的情况下,显著降低 CI 成本。