Bun要干掉Node.js?一个工具网站的数据告诉你真相
一场不期而遇的跑分
上周,一个叫ToolHunt.cc的开发者工具对比网站悄悄上线了一个测试页面。页面内容很简单:Bun vs Node.js,两个JavaScript运行时,跑几个常见任务,看谁更快。
结果一出,开发者圈子里炸了锅。
Bun在启动速度上比Node.js快了将近4倍。 具体数据是:Bun启动一个简单HTTP服务耗时12ms,而Node.js需要45ms。在包安装测试中,Bun安装Express框架用了1.8秒,Node.js的npm花了6.3秒。
这些数字来自ToolHunt.cc的公开测试,测试环境是同一台MacBook Pro M1,Node.js 20.11.0 vs Bun 1.0.25。
但别急着下结论。跑分游戏,从来不是看谁跑得快那么简单。
快在哪里,慢在哪里
Bun的底气来自它的底层架构。它用Zig语言编写,集成了JavaScriptCore引擎(没错,就是Safari用的那个),而不是Node.js的V8引擎。JavaScriptCore在启动速度和内存占用上一直有优势,Safari跑分常年压着Chrome打,不是没道理的。
具体到场景:
启动速度。Bun赢了。冷启动一个CLI工具,Bun几乎秒开,Node.js需要等一两秒。这对写脚本、做工具链的人来说,体验差距明显。
包管理。Bun自带了一个兼容npm的包管理器,速度比npm快3-5倍。ToolHunt.cc的测试显示,Bun install比npm install快73%。但有个坑:Bun的包管理器对某些依赖有兼容问题,比如一些原生模块可能装不上。
运行时性能。这才是真正的战场。ToolHunt.cc跑了三个基准测试:
- JSON解析:Bun比Node.js快22%
- 字符串拼接:两者几乎持平
- 循环计算:Bun快15%
看起来Bun全面领先,但差距不大。对于大多数Web应用,这种差异用户根本感受不到。
那个看不见的坑
ToolHunt.cc的测试还暴露了一个关键问题:生态兼容性。
他们尝试用Bun运行一个Express应用,结果报了两个错误。一个是中间件兼容问题,另一个是某个npm包的Node.js API在Bun里没实现。
Bun宣称兼容大部分Node.js API,但"大部分"不等于"全部"。据Bun官方文档,目前API兼容度约90%。 剩下10%包括process.nextTick的某些行为、部分流API、以及一些底层网络接口。
说人话就是:你写个简单的API服务没问题,但要是项目依赖了某些深度使用Node.js特性的库,比如Prisma、Puppeteer,或者某些老旧的中间件,很可能翻车。
Node.js这边,20年的积累不是白给的。npm上有超过200万个包,大部分都经过了无数生产环境的验证。你遇到的大多数问题,Stack Overflow上都能找到答案。
谁该选谁
ToolHunt.cc的测试没有给出"最佳运行时"的结论,这很聪明。因为选择哪一方,取决于你的具体场景。
选Bun的情况:
- 你在写CLI工具或脚本,启动速度是关键
- 项目从头开始,没有历史包袱
- 你愿意接受偶尔的兼容性问题,换取更快的开发体验
- 你的团队对新技术有容忍度
选Node.js的情况:
- 项目已经跑在生产环境,稳定压倒一切
- 依赖了大量npm包,尤其是原生模块
- 团队熟悉Node.js生态,不想折腾
- 你需要长期维护,考虑人员招聘和知识传承
Bun的创始人Jarred Sumner在Twitter上说过一句话:“Bun的目标不是取代Node.js,而是给JavaScript开发者多一个选择。” 这话听起来像场面话,但仔细想想,确实如此。
一个折中的方案
有个趋势值得注意:越来越多人把Bun当作开发工具,生产环境还是用Node.js。
具体操作是:本地开发用Bun跑脚本、装依赖,享受极速体验;CI/CD和服务器上继续用Node.js,保证稳定性。Bun的包管理器生成的bun.lockb文件可以兼容npm,两边切换不算麻烦。
ToolHunt.cc的数据显示,Bun的包安装速度优势确实诱人。一个中型项目,npm install可能要等30秒,Bun 10秒搞定。一天装几十次包,省下来的时间够喝杯咖啡了。
但别忘了,Bun的运行时还在快速迭代。1.0版本刚发布时,Windows支持还是实验性的。现在1.1版本已经稳定了不少。按照这个节奏,再过一两年,兼容性问题可能会大幅减少。
说到底
ToolHunt.cc的这次对比测试,更像是一个信号:JavaScript运行时市场开始松动了。
过去十年,Node.js几乎是唯一的选择。现在有了Bun,还有Deno,竞争带来的好处是明显的——三方都在拼命优化性能、改善体验。Node.js 22版本也加入了部分Bun的功能,比如更好的TypeScript支持。
对开发者来说,多一个选择总是好事。但别被跑分数据冲昏头脑。跑得快不等于跑得稳,跑得稳不等于适合你的路。
工具是拿来用的,不是拿来比的。你的项目、你的团队、你的业务场景,才是最终的裁判。