鍍金池/ 教程/ HTML/ benchmark 怎么寫
瀏覽器端測(cè)試:mocha,chai,phantomjs
搭建 Node.js 開發(fā)環(huán)境
測(cè)試用例:mocha,should,istanbul
線上部署:heroku
Mongodb 與 Mongoose 的使用
使用 superagent 與 cheerio 完成簡(jiǎn)單爬蟲
js 中的那些最佳實(shí)踐
使用 eventproxy 控制并發(fā)
使用 promise 替代回調(diào)函數(shù)
作用域與閉包:this,var,(function () {})
持續(xù)集成平臺(tái):travis
測(cè)試用例:supertest
benchmark 怎么寫
使用 async 控制并發(fā)
學(xué)習(xí)使用外部模塊
一個(gè)最簡(jiǎn)單的 express 應(yīng)用
正則表達(dá)式
cookie 和 session

benchmark 怎么寫

目標(biāo)

有一個(gè)字符串 var number = '100',我們要將它轉(zhuǎn)換成 Number 類型的 100。

目前有三個(gè)選項(xiàng):+, parseInt, Number

請(qǐng)測(cè)試哪個(gè)方法更快。

知識(shí)點(diǎn)

  1. 學(xué)習(xí)使用 benchmark 庫
  2. 學(xué)習(xí)使用 http://jsperf.com/ 分享你的 benchmark

課程內(nèi)容

首先去弄個(gè) benchmark 庫,https://github.com/bestiejs/benchmark.js 。

這個(gè)庫已經(jīng)兩年沒有更新了,兩年前發(fā)了個(gè) 1.0.0 版本,直到現(xiàn)在。

用法也特別簡(jiǎn)單,照著官網(wǎng)的 copy 下來就好。

我們先來實(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);
};

然后照著官方的模板寫 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)行:

http://wiki.jikexueyuan.com/project/node-lessons/images/10-1.png" alt="" />

可以看到,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)單。