一般咱們在作代碼性能測試時,會在開始時獲取一個時間戳,而後執行要測試的代碼,在結束時再獲取一個時間戳,而後兩個時間戳相減得出代碼執行消耗的時間。這種方法理論上可行,但結果並不老是準確的,特別是被執行的代碼只有幾毫秒執行時間的狀況下。系統上運行的其餘進程可能會致使結果誤差。更好的方法是讓被測試的代碼在單位時間(如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
能夠看出第一種方法比第二種更快,在大數據量處理狀況下,選擇第一種更好。