Skip to Content
文档utoo性能基准

性能基准

本文说明 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 获得不符合真实冷启动语义的额外优势。

poolab Linux · npmmirror 直连

  • 日期:2026-07-21
  • 项目:ant-design
  • 环境:Linux x86_64 (poolab)
  • 镜像源:https://registry.npmmirror.com
  • 网络:直连,无 HTTP_PROXYHTTPS_PROXYNO_PROXY、npm proxy、macmini host entry 或 macmini shell 配置
  • 版本:utoo 1.1.3、Bun 1.3.14、pnpm 10.34.5、aube 1.29.1
  • 采样:p0 / p3 各 3 轮交错采样,p4 5 轮交错采样
场景utooBunpnpmaube
完全冷启动 (p0)7.84s ± 2.17s13.21s ± 2.36s39.32s ± 16.56s27.63s ± 6.47s
仅 lock 冷启动 (p3)6.64s ± 1.64s8.62s ± 3.57s15.14s ± 0.77s6.42s ± 0.31s
热缓存安装 (p4)1.09s ± 0.05s2.72s ± 0.05s7.89s ± 0.38s1.60s ± 0.07s

解读:

  • p0:utoo 是该环境中最快的完全冷启动结果,约为 Bun 耗时的 59%、pnpm 的 20%。
  • p3:utoo 与 aube 的均值差异很小;9 轮配对复测后,utoo-minus-aube 的差值为 +0.214s,标准误为 0.506s,属于噪声范围,应视为基本持平。
  • p4:utoo 的热缓存安装为 1.09s,明显快于 Bun、pnpm 和 aube。修正后的 pnpm warm run 网络接收约 4 KB,确认是有效的热缓存测量。

GitHub Actions · npmjs

  • Harness branch/commit:codex/aube-phase-benchmark / 7a76aa3
  • 项目:ant-design
  • 镜像源:https://registry.npmjs.org
  • 工作流:https://github.com/utooland/utoo/actions/runs/29797404521
  • 采样:p0 / p3 各 3 轮交错采样,p4 5 轮交错采样
  • aube:1.29.1,trustPolicy: off

Linux (ubuntu-latest)

场景utooBunaube
完全冷启动 (p0)8.13s ± 0.33s9.70s ± 0.24s17.54s ± 0.74s
仅 lock 冷启动 (p3)7.22s ± 1.24s7.52s ± 0.04s8.37s ± 1.04s
热缓存安装 (p4)2.25s ± 0.12s3.58s ± 0.05s2.59s ± 0.13s

macOS (macos-latest, Apple Silicon)

场景utooBunaube
完全冷启动 (p0)19.19s ± 2.43s22.81s ± 1.29s55.28s ± 5.78s
仅 lock 冷启动 (p3)12.03s ± 0.53s15.58s ± 3.94s31.31s ± 3.12s
热缓存安装 (p4)3.81s ± 0.19s5.37s ± 0.22s14.76s ± 0.26s

原始 GitHub Actions 工作流有意省略 pnpm:ant-design.npmrc 包含 package-lock=false,pnpm 10 将其映射为 lockfile=false,导致对应单元没有有效的 pnpm-lock.yaml,不能作为 p3 / p4 结果引用。

修正后的 pnpm 验证

  • 加固后的 harness commit:1e88fa2b
  • 工作流:https://github.com/utooland/utoo/actions/runs/29809892297
平台完全冷启动 (p0)仅 lock 冷启动 (p3)热缓存安装 (p4)
Linux26.20s ± 0.81s18.01s ± 1.03s7.19s ± 0.02s
macOS70.58s ± 13.74s57.25s ± 15.07s31.88s ± 2.58s

Linux 的热缓存单元保留了约 1 MB 的 pnpm-lock.yaml 和约 1.45 GB 的 store,同时网络传输只有约 7 KB RX / 18 KB TX,确认这是有效的热缓存测量。同一轮也拒绝了 aube 的 p3 / p4,原因是缺少预期的 seeded lockfile,而不是继续记录陈旧状态的耗时。

测试口径

阶段化 harness 会为每个包管理器使用独立 store,恢复各自 lockfile,禁用生命周期脚本,并在不同轮次中交替包管理器执行顺序,减少网络波动和执行顺序对结果的影响。

测试还会记录网络流量,用于拒绝意外变冷的 warm 单元。例如 p4 应该主要复用已有 lockfile 和 tarball/package store;如果仍出现明显下载流量,就不能作为有效热缓存结果。

旧的 pm-bench-all 结果不应作为 utoo 与 Bun 的性能对比引用。该脚本的 warm 准备步骤会删除生成的 lockfile,但保留全局缓存,实际测量的是“热 manifest 缓存下的重新解析”,不符合这里的 p4 定义。

Last updated on