Bun 的設計目標是速度。熱路徑經過廣泛的剖析和基準測試。所有 Bun 公開基準測試的原始碼都可以在 Bun 儲存庫的 /bench
目錄中找到。
測量時間
為了精確測量時間,Bun 提供了兩個執行時期 API 函式
- Web 標準
performance.now()
函式 Bun.nanoseconds()
與performance.now()
類似,但會傳回自應用程式啟動以來經過的目前時間(以奈秒為單位)。您可以使用performance.timeOrigin
將其轉換為 Unix 時間戳記。
基準測試工具
在撰寫您自己的基準測試時,選擇正確的工具非常重要。
- 對於微基準測試,一個很棒的通用工具是
mitata
。 - 對於負載測試,您必須使用一個 HTTP 基準測試工具,其速度至少與
Bun.serve()
一樣快,否則您的結果將會偏差。一些流行的基於 Node.js 的基準測試工具,例如autocannon
,速度不夠快。我們建議使用以下其中一個工具 - 對於基準測試腳本或 CLI 命令,我們建議使用
hyperfine
。
測量記憶體使用量
Bun 有兩個堆。一個堆是給 JavaScript 執行時間,另一個堆是給其他所有東西。
#JavaScript 堆統計資料
bun:jsc
模組提供了一些用於測量記憶體使用量的函式
import { heapStats } from "bun:jsc";
console.log(heapStats());
檢視範例統計資料
JavaScript 是一種垃圾回收語言,而不是引用計數。在所有情況下,物件沒有立即釋放都是正常且正確的,但物件永遠不會被釋放是不正常的。
手動強制執行垃圾回收
Bun.gc(true); // synchronous
Bun.gc(false); // asynchronous
堆快照讓您可以檢查哪些物件沒有被釋放。您可以使用 bun:jsc
模組來擷取堆快照,然後使用 Safari 或 WebKit GTK 開發人員工具檢視。要產生堆快照
import { generateHeapSnapshot } from "bun";
const snapshot = generateHeapSnapshot();
await Bun.write("heap.json", JSON.stringify(snapshot, null, 2));
要檢視快照,請在 Safari 的開發人員工具(或 WebKit GTK)中開啟 heap.json
檔案
- 開啟開發人員工具
- 按一下「時間軸」
- 按一下左側選單中的「JavaScript 分配」。在您按一下鉛筆圖示顯示所有時間軸之前,它可能不會顯示
- 按一下「匯入」並選取您的堆快照 JSON

匯入後,您應該會看到類似這樣的畫面

原生堆統計資料
Bun 使用 mimalloc 作為另一個堆。若要回報非 JavaScript 記憶體使用量的摘要,請設定 MIMALLOC_SHOW_STATS=1
環境變數。且統計資料將在結束時列印。
MIMALLOC_SHOW_STATS=1 bun script.js
# will show something like this:
heap stats: peak total freed current unit count
reserved: 64.0 MiB 64.0 MiB 0 64.0 MiB not all freed!
committed: 64.0 MiB 64.0 MiB 0 64.0 MiB not all freed!
reset: 0 0 0 0 ok
touched: 128.5 KiB 128.5 KiB 5.4 MiB -5.3 MiB ok
segments: 1 1 0 1 not all freed!
-abandoned: 0 0 0 0 ok
-cached: 0 0 0 0 ok
pages: 0 0 53 -53 ok
-abandoned: 0 0 0 0 ok
-extended: 0
-noretire: 0
mmaps: 0
commits: 0
threads: 0 0 0 0 ok
searches: 0.0 avg
numa nodes: 1
elapsed: 0.068 s
process: user: 0.061 s, system: 0.014 s, faults: 0, rss: 57.4 MiB, commit: 64.0 MiB