benny簡單框架benchmark功能使用
引言
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
– 最小采樣次數
配置的方式有兩種,一種是通過 configure
的 cases
:
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功能的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- JavascriptES6新特性之map和reduce詳解
- 8個JS的reduce使用實例和reduce操作方式
- JavaScript數組reduce常見實例方法
- redis-benchmark並發壓力測試的問題解析
- 關於reduce的介紹及用法說明