Skip to main content
Bun 为速度而生。热路径经过广泛的性能分析和基准测试。所有 Bun 公开基准测试的源代码位于 Bun 仓库的 /bench 目录中。

测量时间

为精确测量时间,Bun 提供了两个运行时 API:
  1. Web 标准的 performance.now() 函数
  2. Bun.nanoseconds(),类似于 performance.now(),但返回应用启动以来的纳秒数。使用 performance.timeOrigin 可将其转换为 Unix 时间戳。

基准测试工具

  • 对于微基准测试,我们推荐使用 mitata
  • 对于负载测试,你必须使用至少与 Bun.serve() 一样快的 HTTP 基准测试工具,否则结果会有偏差。一些流行的基于 Node.js 的基准测试工具(如 autocannon)速度不够快。我们推荐以下之一:
  • 对于脚本或 CLI 命令的基准测试,我们推荐使用 hyperfine

测量内存使用

Bun 有两个堆:一个用于 JavaScript 运行时,另一个用于其他所有内容。

JavaScript 堆统计

bun:jsc 模块提供了几个用于测量内存使用情况的函数:
JavaScript 是一种垃圾回收语言,不是引用计数语言。对象并非在所有情况下都能立即释放,这是正常且正确的,但对象永远不被释放则是不正常的。 强制手动运行垃圾回收:
堆快照可以显示哪些对象未被释放。使用 Bun.generateHeapSnapshot() 获取堆快照,然后使用 Safari 或 WebKit GTK 开发者工具查看。生成堆快照:
要查看快照,在 Safari 的开发者工具(或 WebKit GTK)中打开 heap.json 文件:
  1. 打开开发者工具
  2. 点击”Timeline”
  3. 点击左侧菜单中的”JavaScript Allocations”。可能需要点击铅笔图标显示所有时间线才能看到
  4. 点击”Import”并选择你的堆快照 JSON
导入堆快照
导入后,你应该会看到类似这样的内容:
在 Safari 中查看堆快照
Web 调试器的时间线也会跟踪正在调试会话的内存使用情况。

原生堆统计

Bun 对另一个堆使用 mimalloc。要打印非 JavaScript 内存使用摘要,调用 Bun.unsafe.mimallocDump()

CPU 性能分析

使用 --cpu-prof 标志分析 JavaScript 执行以识别性能瓶颈。
terminal
--cpu-prof 会写入一个 .cpuprofile 文件,你可以在 Chrome DevTools(Performance 标签 → Load profile)或 VS Code 的 CPU 分析器中打开。

Markdown 输出

使用 --cpu-prof-md 生成 markdown 格式的 CPU 分析文件,便于 grep 和 LLM 分析:
terminal
同时使用 --cpu-prof--cpu-prof-md 可一次生成两种格式:
terminal
你也可以通过 BUN_OPTIONS 环境变量传递该标志:
terminal

选项

terminal

堆分析

在退出时生成堆快照以分析内存使用并查找内存泄漏。
terminal
--heap-prof 会写入一个 V8 .heapsnapshot 文件,你可以在 Chrome DevTools(Memory 标签 → Load)中加载。

Markdown 输出

使用 --heap-prof-md 生成 markdown 格式的堆分析文件,适用于 CLI 分析:
terminal
如果同时指定了 --heap-prof--heap-prof-md,则使用 markdown 格式。

选项

terminal