簡単なコード性能テスト方法


通常、コードパフォーマンステストでは、開始時にタイムスタンプを取得し、テストするコードを実行し、終了時にタイムスタンプを取得し、2つのタイムスタンプを減算してコード実行にかかる時間を取得します.この方法は理論的に実行可能であるが,結果は必ずしも正確ではなく,特に実行されるコードが数ミリ秒の実行時間しかない場合である.システム上で実行される他のプロセスは、結果のばらつきを引き起こす可能性があります.より良い方法は、テストされたコードを単位時間(例えば1秒)で循環させ、単位時間で完了した循環回数を統計してコード性能を評価し、テストを繰り返して平均値または中値を得ることができる.これらのテストは同じ時間に実行され、より優れたコードはより多くのサイクルを完了します.
 
一般的な単一実行式のテスト方法:
var startTime = new Date().getTime();

// 

runtest();

var timeElapsed = new Date().getTime() - startTime; // 

 
単位時間サイクル実行式のテスト方法:
var startTime = new Date().getTime(), count, timeElapsed;

for(count = 0, timeElapsed = 0; timeElapsed < 1000; count++){

  // 

  test();

  timeElapsed = new Date().getTime() - startTime;

}

// count 

 
例えばテストしますrandom()*255>>0とparseInt(Math.random(*)*255)は、どちらも数値を整数化しており、通常はランダムカラー(rgb(255,255,255,255))を設定する際に使用されます.
次のテストコードを作成します.
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">

</style>
<script type="text/javascript">
function runtest(func){
  var startTime = new Date().getTime(), count, timeElapsed;
  for(count = 0, timeElapsed = 0; timeElapsed < 1000; count++){
    func();
    timeElapsed = new Date().getTime() - startTime;
  }
  addResult();
  function addResult(){
    var li = document.createElement('li');
    li.innerHTML = count;
    document.getElementById('test_result').appendChild(li);
  }
}
/* your test code here */
function test1(){
  var num = Math.random()*255>>0;
}
function test2(){
  var num = parseInt(Math.random()*255);
}
</script>
</head>
<body>
  <button onclick="runtest(test1)">run test1</button>
  <button onclick="runtest(test2)">run test2</button>
  <ol id="test_result">
  </ol>
</body>
</html>

それぞれ5回テストした結果:
テストrandom()*255>>0の結果
43594444339976432449142188704339112
テストparseInt(Math.random(*255)の結果
36197793713368363992236297293661628
第1の方法は第2の方法よりも速く,ビッグデータ量処理の場合,第1の方法を選択したほうがよいことがわかる.