一种简单的代码性能测试方法

通常我们在做代码性能测试时,会在开始时获取一个时间戳,然后执行要测试的代码,在结束时再获取一个时间戳,然后两个时间戳相减得出代码执行消耗的时间。这种方法理论上可行,但结果并不总是准确的,特别是被执行的代码只有几毫秒执行时间的情况下。系统上运行的其他进程可能会导致结果偏差。更好的方法是让被测试的代码在单位时间(如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为循环执行的次数

 

比如测试 Math.random()*255>>0 和  parseInt(Math.random()*255),这两个都是对数值取整,通常在设置随机颜色(rgb(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次的结果:

测试Math.random()*255>>0 的结果

4359444
4339976
4324491
4218870
4339112

测试parseInt(Math.random()*255)的结果

3619779
3713368
3639922
3629729
3661628

可以看出第一种方法比第二种更快,在大数据量处理情况下,选择第一种更好。

posted @ 2013-09-02 01:21  Kiinlam  阅读(1348)  评论(0编辑  收藏  举报