benny簡單框架benchmark功能使用
引言
benny
是一個簡單的 benchmark
框架,當你需要測試自己的庫或是方法性能時,可使用它來進行對其進行基準測試。
前排先上 GitHub 地址
官方標榜的特性為:
- 可以簡單的編寫任何同步或異步代碼
- 可為每個用例單獨配置
- 可選擇性跳過或只執(zhí)行特定的用力
- 支持多種結(jié)果類型:
JSON
CSV
HTML Table
HTML Chart
- 不需要額外的設(shè)置幾個輸出
- 套件結(jié)果為
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
用來定義用例的輸出,可傳入函數(shù)來自定義,complete
默認為輸出基準測試結(jié)果,同樣可傳入函數(shù)來自定義處理。
隨后的 save
則是用來保存結(jié)果,file
為文件名稱,format
為輸出的格式。支持的格式上面已經(jīng)寫過,不再贅述。
可嘗試執(zhí)行上述 benchmark
文件然后查看輸出結(jié)果:
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
默認會輸出用例名稱及其執(zhí)行效率,如上 Reduce two elements
部分為該用例名稱,213 985 744 ops/s
為執(zhí)行效率表示該方法每秒執(zhí)行了 213 985 744
次,±0.61% 為單案例執(zhí)行時采集結(jié)果的誤差范圍值,fastest
表示其為最快的用例,slowest
其為最慢的用例,非最快用例后會標注效率的百分比差。
如果使用了圖表還可打開圖表查看,會更直觀,如上結(jié)果對應(yīng)的圖表為:
圖表可直接將輸出的圖表 html
打開查看,其中使用 chart.js
進行渲染。
其他功能
除了上述基礎(chǔ)使用,benny
還提供了一些其他的功能,比如可以通過調(diào)用 add.skip
來跳過某個用例,或 add.only
來跳過所有其他用例只執(zhí)行該用例。
如果用例代碼為異步代碼,直接將用例定義為 async
即可。
add('Async benchmark without setup', async () => {= await delay(0.5); // 結(jié)果為 2 ops/s });
除此之外 benny
還支持一些自定義選項:
delay
- 每次測試用例執(zhí)行后的休息時間
initCount
- 每次測試用例執(zhí)行前的初始化次數(shù)
maxTime
- 執(zhí)行的最大次數(shù)
minTime
- 執(zhí)行的最小次數(shù)
minSamples
- 最小采樣次數(shù)
配置的方式有兩種,一種是通過 configure
的 cases
:
b.configure({ cases: options });
即可為所有用例添加配置,也可在 add
時為單個用例添加配置:
b.add( 'Reduce two elements', () => { [1, 2].reduce((a, b) => a + b); }, options );
除了上述配置外,configure
還可配置一些全局配置,不過目前只有一個 minDisplayPrecision
,用來配置輸出內(nèi)容的精度,默認為 2。
總結(jié)
通過 benny
可以方便的為一些方法等進行基準測試,方便查看函數(shù)的執(zhí)行效率,測量各種代碼的性能,并且支持多種輸出結(jié)果,方便各種場景下展示結(jié)果。
如果有類似需要測量函數(shù)性能,或者想要測量某些變更對性能的影響程度時,不妨試試看。
以上就是benny簡單框架benchmark功能使用的詳細內(nèi)容,更多關(guān)于benny框架benchmark功能的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解nodejs微信公眾號開發(fā)——2.自動回復(fù)
這篇文章主要介紹了詳解nodejs微信公眾號開發(fā)——2.自動回復(fù),非常具有實用價值,需要的朋友可以參考下2017-04-04ajax+node+request爬取網(wǎng)絡(luò)圖片的實例(宅男福利)
下面小編就為大家?guī)硪黄猘jax+node+request爬取網(wǎng)絡(luò)圖片的實例(宅男福利)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08node.js中g(shù)runt和gulp的區(qū)別詳解
這篇文章主要介紹了node.js中g(shù)runt和gulp的區(qū)別詳解的相關(guān)資料,需要的朋友可以參考下2017-07-07React和Node.js快速上傳進度條功能實現(xiàn)
這篇文章主要為大家介紹了React和Node.js快速上傳進度條功能實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03