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」(JavaScript 分配)。可能需要点击铅笔图标才能显示所有时间轴
  4. 点击「Import」(导入),选择你的堆快照 JSON
导入堆快照
导入后,你应该看到类似以下界面:
在 Safari 中查看堆快照
Web 调试器的时间轴还会跟踪正在运行的调试会话的内存使用情况。

本地堆统计

Bun 使用 mimalloc 管理另一个堆。要打印非 JavaScript 内存使用情况的摘要,请调用 Bun.unsafe.mimallocDump()

CPU 性能分析

使用 --cpu-prof 标志分析 JavaScript 执行性能,以识别性能瓶颈。
terminal
--cpu-prof 会写入一个 .cpuprofile 文件,你可以在 Chrome DevTools(性能面板 → 加载配置文件)或 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 来生成 CLI 友好的 Markdown 堆分析报告:
terminal
如果同时指定了 --heap-prof--heap-prof-md,则以 Markdown 格式为准。

选项

terminal