性能基准
本文说明 utoo 包管理器基准测试中的不同指标、测试口径和如何解读结果。完整数据与历史记录见 GitHub issue #3250 。
表中的耗时越低越好。不同平台、镜像源、网络拓扑和文件系统会影响绝对耗时,因此不同环境的结果不应直接混合做统计比较。
指标说明
| 指标 | 中文名称 | 测试前状态 | 主要衡量 |
|---|---|---|---|
p0 | 完全冷启动 | 无 lockfile、无 manifest 缓存、无 tarball/package store、无 node_modules | 首次安装时的依赖解析、网络请求、下载、解压和写入成本 |
p3 | 仅 lock 冷启动 | lockfile 已存在,但 tarball/package store 和 node_modules 被移除 | 已锁定依赖图后,在无包缓存时恢复依赖的能力 |
p4 | 热缓存安装 | lockfile 和 tarball/package store 已存在,仅移除 node_modules | 命中全局包缓存后,重建项目依赖目录的能力 |
不要使用“无 lockfile 但 manifest 缓存是热的”作为对比场景。Bun 会在短时间内保留较新的 manifest 且不重新校验,这个状态会让 Bun 获得不符合真实冷启动语义的额外优势。
2026-08-27
registry.npmjs.org · GitHub Actions
- Harness branch/commit:
codex/pm-bench-pnpm12/2204fd0f4 - 项目:
ant-design - 镜像源:
https://registry.npmjs.org - 工作流:GitHub Actions #33039114486
- 版本:utoo 基于
2204fd0f4构建、Bun 1.4.0、pnpm 10.34.5、pnpm 12.0.0、aube 1.29.1 - 采样:
p0/p3各 1 次正式采样,p45 轮交错采样;p0/p3仅作为 smoke 方向性证据
Linux (ubuntu-latest)
| 场景 | utoo | Bun | pnpm 10 | pnpm 12 | aube |
|---|---|---|---|---|---|
完全冷启动 (p0) | 7.87s | 9.62s | 29.56s | 10.14s | 16.13s |
仅 lock 冷启动 (p3) | 9.66s | 10.40s | 18.32s | 10.58s | — |
热缓存安装 (p4) | 2.35s ± 0.04s | 3.65s ± 0.34s | 6.14s ± 0.07s | 3.39s ± 0.24s | — |
macOS (macos-latest, Apple Silicon)
| 场景 | utoo | Bun | pnpm 10 | pnpm 12 | aube |
|---|---|---|---|---|---|
完全冷启动 (p0) | 20.46s | 23.42s | 57.19s | 30.32s | 51.44s |
仅 lock 冷启动 (p3) | 15.80s | 25.31s | 60.12s | 31.55s | — |
热缓存安装 (p4) | 4.76s ± 0.20s | 6.43s ± 0.42s | 24.69s ± 3.67s | 21.89s ± 2.63s | — |
这轮 smoke 中,utoo 在 Linux 和 macOS 的三个用户可见安装场景里均最快。aube 完成了 p0,但其 seed 步骤没有生成预期的 aube-lock.yaml,因此 harness 拒绝了 p3 / p4 单元,没有记录无锁或陈旧状态的耗时。
registry.npmmirror.com · Linux China
- Harness branch/commit:
codex/pm-bench-pnpm12/2204fd0f4 - 项目:
ant-designate8fbc23658a323812864d56d53b5d25b73784dd1 - 环境:Linux China x86_64,96 logical CPUs、16 GiB RAM、Node.js 22.18.0
- 镜像源:
https://registry.npmmirror.com - 网络:直连;代理环境变量未设置,benchmark 命令显式指定 npmmirror
- 版本:utoo 基于
2204fd0f4构建、Bun 1.3.14、pnpm 10.34.5、pnpm 12.0.0、aube 1.29.1 - 采样:
p0/p3各 3 轮交错采样,p45 轮交错采样
| 场景 | utoo | Bun | pnpm 10 | pnpm 12 | aube |
|---|---|---|---|---|---|
完全冷启动 (p0) | 12.04s ± 1.25s | 19.63s ± 1.32s | 33.88s ± 0.64s | 18.50s ± 6.22s | 26.47s ± 7.65s |
仅 lock 冷启动 (p3) | 22.28s ± 12.71s | 31.75s ± 15.11s | 40.70s ± 11.64s | 31.67s ± 10.09s | — |
热缓存安装 (p4) | 1.22s ± 0.07s | 4.58s ± 0.32s | 9.86s ± 0.48s | 2.60s ± 0.09s | — |
解读:
p0:utoo 的均值最快;pnpm 12 的均值比 utoo 慢约 54%,但两者波动都应结合原始样本解读。p3:utoo 的均值最快,pnpm 12 慢约 42%;该阶段方差较高,只适合作为方向性结论。p4:utoo 为 1.22s,pnpm 12 为 2.60s;两组方差都较小,是本轮最稳定的领先信号。- aube 的
p3/p4因没有生成预期 lockfile 被拒绝,不参与排名。
测试口径
阶段化 harness 会为每个包管理器使用独立 store,恢复各自 lockfile,禁用生命周期脚本,并在不同轮次中交替包管理器执行顺序,减少网络波动和执行顺序对结果的影响。
测试还会记录网络流量,用于拒绝意外变冷的 warm 单元。例如 p4 应该主要复用已有 lockfile 和 tarball/package store;如果仍出现明显下载流量,就不能作为有效热缓存结果。
旧的 pm-bench-all 结果不应作为 utoo 与 Bun 的性能对比引用。该脚本的 warm 准备步骤会删除生成的 lockfile,但保留全局缓存,实际测量的是“热 manifest 缓存下的重新解析”,不符合这里的 p4 定义。
Last updated on