一種簡單的代碼性能測試方法

一般咱們在作代碼性能測試時,會在開始時獲取一個時間戳,而後執行要測試的代碼,在結束時再獲取一個時間戳,而後兩個時間戳相減得出代碼執行消耗的時間。這種方法理論上可行,但結果並不老是準確的,特別是被執行的代碼只有幾毫秒執行時間的狀況下。系統上運行的其餘進程可能會致使結果誤差。更好的方法是讓被測試的代碼在單位時間(如1秒)內循環運行,而後統計單位時間內完成的循環次數來評價代碼性能,能夠重複測試來獲取均值或中值。這些測試會運行相同的時間,更優的代碼會完成更多的循環。javascript

 

常見的單次執行式的測試方法:css

var startTime = new Date().getTime();

//在這裏執行代碼

runtest();

var timeElapsed = new Date().getTime() - startTime; //執行代碼消耗的時間

 

單位時間循環執行式的測試方法:html

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))時會用到,「>>」是算術位右移,能夠去掉小數部分。java

編寫以下測試代碼:app

<!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次的結果:dom

測試Math.random()*255>>0 的結果性能

4359444
4339976
4324491
4218870
4339112測試

測試parseInt(Math.random()*255)的結果大數據

3619779
3713368
3639922
3629729
3661628spa

能夠看出第一種方法比第二種更快,在大數據量處理狀況下,選擇第一種更好。

相關文章
相關標籤/搜索