首頁 > 軟體

benny簡單框架benchmark功能使用

2022-08-15 14:02:43

引言

benny 是一個簡單的 benchmark 框架,當你需要測試自己的庫或是方法效能時,可使用它來進行對其進行基準測試。

前排先上 GitHub 地址

官方標榜的特性為:

  • 可以簡單的編寫任何同步或非同步程式碼
  • 可為每個用例單獨設定
  • 可選擇性跳過或只執行特定的用力
  • 支援多種結果型別:
    • JSON
    • CSV
    • HTML Table
    • HTML Chart
  • 不需要額外的設定幾個輸出
  • 套件結果為 Promise

使用

先看下使用方法:

const b = require('benny');
b.suite(
    'Example',
    b.add('Reduce two elements', () => {
        [1, 2].reduce((a, b) => a + b);
    }),
    b.add('Reduce five elements', () => {
        [1, 2, 3, 4, 5].reduce((a, b) => a + b);
    }),
    b.cycle(),
    b.complete(),
    b.save({ file: 'reduce', version: '1.0.0' }),
    b.save({ file: 'reduce', format: 'chart.html' })
);

如上定義了一組套件,名稱為 Example,然後通過 add 新增兩個用例,cycle 用來定義用例的輸出,可傳入函數來自定義,complete 預設為輸出基準測試結果,同樣可傳入函數來自定義處理。

隨後的 save 則是用來儲存結果,file 為檔名稱,format 為輸出的格式。支援的格式上面已經寫過,不再贅述。

可嘗試執行上述 benchmark 檔案然後檢視輸出結果:

Running "Example" suite...
Progress: 100%
  Reduce two elements:
    213 985 744 ops/s, ±0.61%   | fastest
  Reduce five elements:
    109 395 371 ops/s, ±0.66%   | slowest, 48.88% slower
Finished 2 cases!
  Fastest: Reduce two elements
  Slowest: Reduce five elements
Saved to: benchmark/results/reduce.json
Saved to: benchmark/results/reduce.chart.html

預設會輸出用例名稱及其執行效率,如上 Reduce two elements 部分為該用例名稱,213 985 744 ops/s 為執行效率表示該方法每秒執行了 213 985 744 次,±0.61% 為單案例執行時採集結果的誤差範圍值,fastest 表示其為最快的用例,slowest 其為最慢的用例,非最快用例後會標註效率的百分比差。

如果使用了圖表還可開啟圖表檢視,會更直觀,如上結果對應的圖表為:

圖表可直接將輸出的圖表 html 開啟檢視,其中使用 chart.js 進行渲染。

其他功能

除了上述基礎使用,benny 還提供了一些其他的功能,比如可以通過呼叫 add.skip 來跳過某個用例,或 add.only 來跳過所有其他用例只執行該用例。

如果用例程式碼為非同步程式碼,直接將用例定義為 async 即可。

add('Async benchmark without setup', async () => {=
    await delay(0.5);
    // 結果為 2 ops/s
});

除此之外 benny 還支援一些自定義選項:

delay - 每次測試用例執行後的休息時間

initCount - 每次測試用例執行前的初始化次數

maxTime - 執行的最大次數

minTime - 執行的最小次數

minSamples - 最小取樣次數

設定的方式有兩種,一種是通過 configurecases

b.configure({
    cases: options
});

即可為所有用例新增設定,也可在 add 時為單個用例新增設定:

b.add(
    'Reduce two elements',
    () => {
        [1, 2].reduce((a, b) => a + b);
    },
    options
);

除了上述設定外,configure 還可設定一些全域性設定,不過目前只有一個 minDisplayPrecision,用來設定輸出內容的精度,預設為 2。

總結

通過 benny 可以方便的為一些方法等進行基準測試,方便檢視函數的執行效率,測量各種程式碼的效能,並且支援多種輸出結果,方便各種場景下展示結果。

如果有類似需要測量函數效能,或者想要測量某些變更對效能的影響程度時,不妨試試看。

以上就是benny簡單框架benchmark功能使用的詳細內容,更多關於benny框架benchmark功能的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com