benny簡單框架benchmark功能使用
引言
benny 是一個(gè)簡單的 benchmark 框架,當(dāng)你需要測試自己的庫或是方法性能時(shí),可使用它來進(jìn)行對其進(jìn)行基準(zhǔn)測試。
前排先上 GitHub 地址
官方標(biāo)榜的特性為:
- 可以簡單的編寫任何同步或異步代碼
- 可為每個(gè)用例單獨(dú)配置
- 可選擇性跳過或只執(zhí)行特定的用力
- 支持多種結(jié)果類型:
JSONCSVHTML TableHTML Chart
- 不需要額外的設(shè)置幾個(gè)輸出
- 套件結(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 添加兩個(gè)用例,cycle 用來定義用例的輸出,可傳入函數(shù)來自定義,complete 默認(rèn)為輸出基準(zhǔn)測試結(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
默認(rèn)會(huì)輸出用例名稱及其執(zhí)行效率,如上 Reduce two elements 部分為該用例名稱,213 985 744 ops/s 為執(zhí)行效率表示該方法每秒執(zhí)行了 213 985 744 次,±0.61% 為單案例執(zhí)行時(shí)采集結(jié)果的誤差范圍值,fastest 表示其為最快的用例,slowest 其為最慢的用例,非最快用例后會(huì)標(biāo)注效率的百分比差。
如果使用了圖表還可打開圖表查看,會(huì)更直觀,如上結(jié)果對應(yīng)的圖表為:

圖表可直接將輸出的圖表 html 打開查看,其中使用 chart.js 進(jìn)行渲染。
其他功能
除了上述基礎(chǔ)使用,benny 還提供了一些其他的功能,比如可以通過調(diào)用 add.skip 來跳過某個(gè)用例,或 add.only 來跳過所有其他用例只執(zhí)行該用例。
如果用例代碼為異步代碼,直接將用例定義為 async 即可。
add('Async benchmark without setup', async () => {=
await delay(0.5);
// 結(jié)果為 2 ops/s
});
除此之外 benny 還支持一些自定義選項(xiàng):
delay - 每次測試用例執(zhí)行后的休息時(shí)間
initCount - 每次測試用例執(zhí)行前的初始化次數(shù)
maxTime - 執(zhí)行的最大次數(shù)
minTime - 執(zhí)行的最小次數(shù)
minSamples - 最小采樣次數(shù)
配置的方式有兩種,一種是通過 configure 的 cases:
b.configure({
cases: options
});
即可為所有用例添加配置,也可在 add 時(shí)為單個(gè)用例添加配置:
b.add(
'Reduce two elements',
() => {
[1, 2].reduce((a, b) => a + b);
},
options
);
除了上述配置外,configure 還可配置一些全局配置,不過目前只有一個(gè) minDisplayPrecision,用來配置輸出內(nèi)容的精度,默認(rèn)為 2。
總結(jié)
通過 benny 可以方便的為一些方法等進(jìn)行基準(zhǔn)測試,方便查看函數(shù)的執(zhí)行效率,測量各種代碼的性能,并且支持多種輸出結(jié)果,方便各種場景下展示結(jié)果。
如果有類似需要測量函數(shù)性能,或者想要測量某些變更對性能的影響程度時(shí),不妨試試看。
以上就是benny簡單框架benchmark功能使用的詳細(xì)內(nèi)容,更多關(guān)于benny框架benchmark功能的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解如何使用Node.js編寫命令工具——以vue-cli為例
本篇文章主要介紹了如何使用Node.js編寫命令工具——以vue-cli為例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
詳解nodejs中express搭建權(quán)限管理系統(tǒng)
本篇文章主要介紹了詳解express搭建權(quán)限管理系統(tǒng),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
Vue+Node服務(wù)器查詢Mongo數(shù)據(jù)庫及頁面數(shù)據(jù)傳遞操作實(shí)例分析
這篇文章主要介紹了Vue+Node服務(wù)器查詢Mongo數(shù)據(jù)庫及頁面數(shù)據(jù)傳遞操作,結(jié)合實(shí)例形式分析了node.js查詢MongoDB數(shù)據(jù)庫及vue前臺頁面渲染等相關(guān)操作技巧,需要的朋友可以參考下2019-12-12
如何在 Node.js 中使用 axios 配置代理并實(shí)現(xiàn)圖片并發(fā)下載
這篇文章主要介紹了如何在Node.js中使用axios配置代理并實(shí)現(xiàn)圖片并發(fā)下載,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-07-07
nodejs實(shí)現(xiàn)解析xml字符串為對象的方法示例
這篇文章主要介紹了nodejs實(shí)現(xiàn)解析xml字符串為對象的方法,涉及nodejs針對xml格式字符串的解析與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
NodeJs 實(shí)現(xiàn)簡單WebSocket即時(shí)通訊的示例代碼
這篇文章主要介紹了NodeJs 實(shí)現(xiàn)簡單WebSocket即時(shí)通訊的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Node.js 實(shí)現(xiàn)簡單的接口服務(wù)器的實(shí)例代碼
這篇文章主要介紹了Node.js 實(shí)現(xiàn)簡單的接口服務(wù)器的實(shí)例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05
Nodejs把接收圖片base64格式保存為文件存儲(chǔ)到服務(wù)器上
這篇文章主要介紹了Nodejs把接收圖片base64格式保存為文件存儲(chǔ)到服務(wù)器上,文中代碼較簡短,需要的朋友可以參考下2018-09-09
Nodejs 發(fā)送Post請求功能(發(fā)短信驗(yàn)證碼例子)
這篇文章主要介紹了Nodejs 發(fā)送Post請求功能(發(fā)短信驗(yàn)證碼例子),需要的朋友可以參考下2017-02-02

