うめすこんぶ

日々のプログラミングで残しておきたいメモ.何かの役に立てれば幸いです.

javascriptで実行時間を計りたいとき,Date.now() と new Date()はどちらを使うべき?

スポンサーリンク

タイトル通り.ベンチマーク関数を作って計測. 百万回やった合計時間でどちらが速いか算出します.

(ブラウザ: Chrome Ver 32.0.1700.107 m)

Method

回数nと関数f,関数名nameを引数に取り関数fのn回の実行時間を計測し,ログに表示します.

/**
 * @param name 関数名
 * @param n 回数
 * @param f 対象
 */
function benchmarkN(name, n, f) {
  console.log(name);
  
  var args = Array.prototype.slice.call(arguments).slice(3);
  var s = Date.now();
  
  for(var i = 0; i < n; i++){
    f.apply(null, args);
  }

  var t = Date.now() - s;
  
  console.log(': time = ' + t + 'msec');
  
  return t;
}

Testing

var times = 1000000;
benchmarkN('new Date()', times, function() {
  return new Date();
});

benchmarkN('Date().now()', times,  function() {
  return Date.now();
});

Result

method time
new Date() 233msec
Date().now() 142msec

やはり,いちいちインスタンスを生成するnew Date()は遅い. ということで,当たり前の結果になりました.スッキリしたのでこれから計測時間を計りたいときはDate.now()一択にします.