基準測試對比表

貼上多組實現的原始耗時資料,一鍵得到均值、中位數、標準差、最小值、最大值和相對倍數的對比表,並可匯出 Markdown 表格。

把一堆耗時資料變成一張對比表。 每行一組:名稱、冒號、原始測量值。工具會算出常用統計量,以最快的一組為基準排出相對倍數,並生成可直接貼進 PR 的 Markdown 表格。

每行寫成「名稱: 數值, 數值, 數值」。逗號、分號、空格都可以作為分隔符。

分組 次數 均值 中位數 標準差 最小 最大 相對倍數

至少輸入一行「名稱: 1, 2, 3」格式的資料才能生成對比表。

看懂基準測試表,不被數字誤導

均值和中位數不一致是有原因的

表格同時給出兩者,兩者之間的差距是最值得先看的東西。如果均值明顯高於中位數,說明少數幾次慢速執行把平均值拉高了——可能是一次 GC 停頓、一陣快取失效風暴,或者作業系統臨時把別的任務排程到了你的核心上。中位數會忽略這些,均值不會。

哪個才「對」並沒有定論。如果你要按穩態吞吐量來規劃伺服器容量,均值才是重點,因為那些慢速執行確實消耗了真即時間。如果你在比較兩種實現、判斷哪個演算法更好,中位數通常更公平,因為離群值衡量的是你的機器而不是你的程式碼。你在推理哪個就引用哪個,並且明確說明用的是哪個。

標準差告訴你這次比較是否成立

均值的差異只有在相對於離散程度足夠大時才有意義。兩組分別是 12.0 和 12.4 毫秒、標準差 0.05,那是真實的差異。同樣兩個均值、標準差是 3.0,那就是同一個數字換了頂帽子,從中得出的任何結論都只是噪音。

本工具使用樣本標準差,除以 n-1 而不是 n。這裡這樣做是正確的:你的這些執行是從「所有可能執行」這個總體中抽出的樣本,而不是總體本身,除以 n 會系統性地低估離散度。只有一次執行時不存在離散度,該列顯示 0——這也提醒你:一次測量不叫基準測試。

相對倍數才是別人會記住的數字

最後一列把每組表示為最快那組的倍數,因為結果通常就是以這種形式被複述的。「新解析器快 2.4 倍」能傳播開;「新解析器平均 8.2 毫秒」傳不開,除非聽的人已經知道基準值。

兩點提醒。第一,這個比值繼承了背後兩個均值的全部不確定性,所以在資料噪聲大的情況下 1.05 倍的差距根本不算差距。第二,「均值之比」和「比值之均值」不是一回事,如果各次執行的規模差異很大,兩者甚至可能指向相反的方向。數字接近時,請把離散度和倍數一起報出來,讓讀者自己判斷。

全部計算在瀏覽器本地用原生 JavaScript 完成,不依賴第三方庫,不上傳資料,不做追蹤。

常見問題

測量資料需要什麼格式?
每組一行:名稱、冒號,然後是數字。逗號、分號、空格和製表符都算分隔符,所以大多數直接複製來的輸出無需修改即可使用。
單位選擇框會做換算嗎?
不會,它隻影響輸出的標註。統計量完全按你輸入的原始數字計算,因此頁面上所有分組必須事先統一到同一個單位。
為什麼只有一次執行時標準差是 0?
樣本標準差除以 n-1,當 n 為 1 時結果為零。單次測量本就沒有離散度可言,這個 0 是在提示你應該多跑幾次。
「相對倍數」是怎麼算的?
用每組的均值除以頁面上最小的均值。最快的那組直接標註為「最快」而不是顯示 1.00 倍,因為匯出表格時這樣更好讀。
能直接貼上基準測試工具的輸出嗎?
通常可以。只要每行有名稱、冒號和一些數字,多餘的標點會被當作分隔符處理。沒有冒號的行會被跳過,不會報錯。
Markdown 表格能直接貼到 PR 裡嗎?
可以,它是標準的 GitHub 風格 Markdown,含表頭行和分隔行。列標題跟隨頁面語言,如果需要英文表頭請先切換語言。