有一個(gè)字符串 var number = '100'
,我們要將它轉(zhuǎn)換成 Number 類(lèi)型的 100。
目前有三個(gè)選項(xiàng):+, parseInt, Number
請(qǐng)測(cè)試哪個(gè)方法更快。
首先去弄個(gè) benchmark 庫(kù),https://github.com/bestiejs/benchmark.js 。
這個(gè)庫(kù)已經(jīng)兩年沒(méi)有更新了,兩年前發(fā)了個(gè) 1.0.0 版本,直到現(xiàn)在。
用法也特別簡(jiǎn)單,照著官網(wǎng)的 copy 下來(lái)就好。
我們先來(lái)實(shí)現(xiàn)這三個(gè)函數(shù):
var int1 = function (str) {
return +str;
};
var int2 = function (str) {
return parseInt(str, 10);
};
var int3 = function (str) {
return Number(str);
};
然后照著官方的模板寫(xiě) benchmark suite:
var number = '100';
// 添加測(cè)試
suite
.add('+', function() {
int1(number);
})
.add('parseInt', function() {
int2(number);
})
.add('Number', function () {
int3(number);
})
// 每個(gè)測(cè)試跑完后,輸出信息
.on('cycle', function(event) {
console.log(String(event.target));
})
.on('complete', function() {
console.log('Fastest is ' + this.filter('fastest').pluck('name'));
})
// 這里的 async 不是 mocha 測(cè)試那個(gè) async 的意思,這個(gè)選項(xiàng)與它的時(shí)間計(jì)算有關(guān),默認(rèn)勾上就好了。
.run({ 'async': true });
直接運(yùn)行:
可以看到,parseInt 是最快的。
如果想要在線分享你的 js benchmark,用這個(gè)網(wǎng)站:http://jsperf.com/ 。
比如我在上面測(cè)試 Math.log
的效率:
http://jsperf.com/math-perf-alsotang
進(jìn)入之后點(diǎn)擊那個(gè) Run tests
按鈕,就可以在瀏覽器中看到它們的效率差異了,畢竟瀏覽器也是可以跑 js 的。
點(diǎn)擊這里:http://jsperf.com/math-perf-alsotang/edit ,就可以看到這個(gè) benchmark 是怎么配置的,很簡(jiǎn)單。
更多建議: