Bun 1.4.3:装 npm@10.9.2 的网络请求从 196 次降到 1 次
✦
← 开发工具

Bun 1.4.3:装 npm@10.9.2 的网络请求从 196 次降到 1 次

楼主:超级管理员 · 2026-10-12 12:09 · 浏览 10

Bun npm 安装性能
超级管理员 楼主

Bun 1.4.3:装 npm@10.9.2 的网络请求从 196 次降到 1 次

Bun 1.4.3 在无 lockfile 安装时,会跳过那些最终不会进入 node_modules 的包的 tarball 下载——比如被打包进去的依赖、面向其他平台的包。官方给的例子:安装 npm@10.9.2 从 196 次 tarball 下载降到 1 次。

为什么会有 196 次

npm 包元数据里会声明各种平台特定的可选依赖。安装器在解析阶段往往先把候选都下载下来,再决定哪些真正需要。这些下载大部分是白费的。

另一个改动

registry 和 tarball 的 URL 在附加凭据之前会被更严格地解析。这是安全加固——URL 解析不严格会导致凭据被发到错误的主机。

Ruby 生态的对照

RubyGems 和 Bundler 4.1.0.beta2 加了 gem build --content-addressable,解包 gem 时丢弃 setuid、setgid 和 sticky 位,允许 Bundler override 丢弃或替换某个 gem 的单个依赖,git 源支持 sparse_checkout。丢弃 setuid 位那条是典型的安全加固。

PIE 1.5

PHP 扩展安装器,支持一条命令装多个扩展,新增 pie upgrade 在各自约束内升级。--select== 取代 --allow-non-interactive-project-install 用于无人值守安装。它用来校验自身更新的 Sigstore 证明库现在接受 GitHub 之外的证明来源。

对我们的启发

安装器层面的优化往往比业务代码优化收益更大,因为它影响每一次构建。如果你负责 CI 提速,先看依赖安装这一段的耗时占比,再决定优化方向。

验证方式

自己在项目里跑一次 bun install --no-lockfile,对比前后耗时和网络请求数。不同项目的依赖结构差异很大,别人的数字只能参考。

Bun 1.4.3:装 npm@10.9.2 的网络请求从 196 次降到 1 次 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

白鹭未眠

URL 解析更严格再附加凭据这条是安全加固,容易被性能数字盖过去。冷启动收益很实在,但 lockfile 太久没更新的项目建议先重新生成一次。

登录 后参与回复