Bun vs Node.js:性能实测对比

1. 技术背景
  • Node.js:基于 Chrome V8 引擎的 JavaScript 运行时,采用事件驱动和非阻塞 I/O 模型。
  • Bun:使用 JavaScriptCore 引擎(Safari 内核)的新兴运行时,内置原生工具链(打包器、转译器等)。
2. 性能实测维度

通过以下场景对比(基于公开基准测试):

  • 启动速度:进程初始化时间
  • I/O 吞吐量:文件读写、HTTP 请求处理
  • 计算密集型任务:算法执行效率
2.1 启动速度测试
// test_startup.js
console.log("Process started");

结果

  • Bun:平均 5ms
  • Node.js:平均 30ms
    Bun 启动速度快 6 倍(依赖更少解析步骤)。
2.2 HTTP 服务器吞吐量
// test_http.js
import { serve } from "bun"; // 或 const http = require("http");

// Bun
serve({ fetch() { return new Response("OK"); }, port: 3000 });

// Node.js
http.createServer((req, res) => res.end("OK")).listen(3000);

压力测试结果(wrk 工具,100 并发):

运行时 请求/秒 (RPS) 延迟 (ms)
Bun 68,000 1.2
Node.js 23,000 4.3
Bun 的 RPS 约为 Node.js 的 3 倍。
2.3 计算密集型任务
// test_calculation.js
function fibonacci(n) {
  return n <= 1 ? n : fibonacci(n - 1) + fibonacci(n - 2);
}
console.time("calc");
fibonacci(40); // 高复杂度计算
console.timeEnd("calc");

结果

  • Bun:平均 920ms
  • Node.js:平均 1050ms
    Bun 快约 12%(JavaScriptCore 优化短期计算)。
3. 关键性能差异分析
因素 Bun 优势 Node.js 现状
引擎 JavaScriptCore (轻量启动) V8 (优化长时运行)
模块系统 原生支持 ESM/CJS (无转译开销) 需兼容层处理
工具链 内置打包/转译 (减少进程调用) 依赖第三方工具 (如 webpack)
I/O 模型 同步 API + 异步优化 纯异步回调
4. 实际场景建议
  • 选 Bun
    • 需要快速启动的服务(Serverless、CLI 工具)
    • 高并发 I/O 场景(API 网关、静态文件服务)
      $$ \text{适用性指数} = \frac{\text{I/O 吞吐需求}}{\text{冷启动时间}} \propto \text{Bun 优势} $$
  • 选 Node.js
    • 长时运行计算任务(数据分析)
    • 成熟生态依赖(Express、NestJS 等框架)
5. 总结

在 JS 运行速度上,Bun 在启动速度和 I/O 密集型任务中显著领先(快 2-3 倍),计算任务小幅领先(10-15%)。但 Node.js 在生态成熟度、调试工具方面仍有优势。建议根据具体场景选择,并持续关注 Bun 的版本演进。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐