真的能取代 Node.js 吗?Bun 多方位性能“实测”
Bun 是一个集多功能于一体的开发工具包,专门用于开发现代的 JavaScript 和 TypeScript 应用程序。

看了官网的介绍,发现 Bun 还是有些东西的。它主要分了 4 大功能:
- 运行时:
bun run index.ts,对标 Node.js; - 包管理:
bun install,对标 npm、pnpm、yarn 等; - 打包工具:
bun build,对标 vite、esbuild、Webpack 等; - 测试运行工具:
bun test,对标 Jest、Vitest。
是不是很屌?大有一统前端之势。
不仅囊括了这些功能,而且还号称速度比它们更快!
官方文档上到处都能看到与其他工具比拼速度的文案,下面我就用官网上的案例来一一实测,看看是否真如文档所“吹”。
1️⃣ 打包实测
👉 打包 10000 个 React 组件
这是在官网首页的一张截图:

点击底部的View benchmark找到测试源码,并clone到本地。
然后按照文档说明运行命令:
node bench.mjs实测结果如下:

耗时参考性不大,毕竟不同设备的性能都不一样,没法比较,但是相对速度还是可以比较一下的。
为了看起来更加直观,我将实测结果绘制成了一张图表:

很明显,Bun 排第一;esbuild、rolldown、vite 排在第二梯度;rspack、rsbuild 排第三梯度。
rolldown 与 Vite 是一家,它是为了取代早期 Vite 中的 esbuild 和 rollup 两个依赖。
rspack 和 rsbuild 也是一家,直接对标的就是 webpack。
这些都是新兴起的打包工具,速度都远比传统打包工具快,如:webpack、rollup 等。我也试了一下,如果使用 rollup 打包的话耗时差不多要 80 多秒,速度已经不在一个级别了,所以就没有对比的必要。
2️⃣ 网络实测
👉 一个简单的 Express.js 服务

还是一样,找到源码,按照文档说明进行测试。
先使用 Bun 启动服务:
bun express/index.mjs文档上推荐使用oha工具进行测试:
oha http://localhost:3000 -n 500000 -H "Accept-Encoding: identity"最后结果如下:15634 req/sec

同样的方法启动node express/index.mjs,然后进行测试,其结果如下:4835 req/sec

我们可以计算得出:15634 / 4835 ≈ 3.2,与官方测试结果确实相差不大。
3️⃣ 包安装实测
官方宣称包安装速度是 npm 的25 倍!

我们随便找个项目验证一下,看是否“打脸”。
为了节省时间,我在package.json中只添加了 3 个依赖包。
"dependencies": {
"express": "^5.1.0",
"postgres": "^3.4.7",
"@types/bun": "1.3.2"
}使用官方推荐的测试工具hyperfine:
hyperfine "bun install --backend=hardlink" "npm install --no-scripts --ignore-scripts" --prepare="rm -rf node_modules" --cleanup="rm -rf node_modules" --warmup=8最后实测结果如下:

才2.5 倍!与官方宣称相差甚远。
为了进一步确定,我加入了pnpm又重新跑了几遍,并且特地找了一个差距最大的结果:

没有意外,相对npm install还是2.5 倍,是pnpm install的1.6 倍。
虽然实测下来“宣称的 25 倍”打脸了,但人家的速度确实更快,这没得反驳。
总结
个人感觉 Bun 确实是有些东西的,如果能够持续迭代下去,也许会成为前端的一匹黑马杀出重围。
据官方文档介绍,目前 Node.js 的兼容度已接近 100%,并且它的文档也非常完善,对各种技术栈的支持都很高。
如果是纯前端的新项目,也不妨一试!