2013-02-20 91 views
2

我正在做一些JavaScript練習並考慮如何將我的解決方案(算法)改進爲the exercise。我正在考慮在調整代碼後計算運行時速度,以便知道速度有多快。我搜索並找到了this method,並認爲我可以做同樣的事情。這是我做的,如何在獨立JavaScript程序中計算運行時速度?

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

function testTargeAlgorithm(){ 
    .... 
    .... 
} 

testTargetAlgorithm(); 

endTime = d.getTime(); 
console.log(endTime-startTime); 

這是一個非常簡單的算法,所以我不指望會有明顯的時間差異。但是,如果毫秒不能衡量速度的提高,我還能做什麼?

+2

使用內置於Firebug或WebKit調試器的分析器。 – marekful 2013-02-20 16:39:47

+0

添加一個循環,以便您可以調用您的函數1000次或更多次。另一方面,如果差值<1ms,那麼它並不重要,是嗎? – AndrewR 2013-02-20 16:43:15

+0

@MarcellFülöp我明白了。我會仔細看看的。 – Bao 2013-02-21 15:22:21

回答

2

你可以,如果引擎支持它使用performance.now()。這會給出一個以毫秒爲單位的時間,自加載頁面或應用程序啓動以來,精度爲亞毫秒級。

performance.now() // 26742.766999999956 

我知道Chrome支持它,但不知道其他瀏覽器,node.js或其他引擎獨立js引擎。


或者你可以在一個循環中運行代碼很多次,並測量所花費的總時間。

+1

謝謝。我使用Node.js作爲解釋器,我發現它有一個類似的函數process.hrtime(),它返回一個兩元素數組:'[seconds,nanoseconds]'。以那納秒的精度,我可以看到每次調整後的差異。另一個新問題是每次運行的偏差:即使不進行調整,每次程序運行時差異都會有所不同。所以我做的是平均運行10000次以減少偏差。 – Bao 2013-02-21 15:17:34

1

一次又一次運行相同的功能。

var startTime = (new Date()).getTime(); 
for(var i=0;i<1000;i++) { 
    testTargeAlgorithm() 
} 
var endTime = (new Date()).getTime(); 
console.log(endTime-startTime); 

編輯,以反映的建議,感謝馬塞爾

+1

我試過了,但即使我運行1000000次的算法,它似乎毫秒也無法捕捉細微的差異。我猜測這種算法對於這種測量來說太簡單了。但是,使用納秒級方法(Node.js的'process.hrtime()'),成功捕獲時間差異。 – Bao 2013-02-21 15:20:42

+0

這個例子中有一個錯誤。 「var endtime」需要是「var endTime」。所以我不會讓我做一個字符編輯。 – broccoli2000 2016-09-11 18:24:25

0

我最終使用process.hrtime()爲測量運行時性能提供了納秒精度。請注意,此方法僅適用於Node.js.在Chrome & Firefox中,您可以使用performance.now()

即使運行相同的算法/函數,返回的時間差仍然變化(以納秒單位壽)大概是由於CPU使用率和其他未知的影響,所以建議跑好多次,並計算平均值。例如:

function calAvgSpeed(timesToRun, targetAlgorithm){ 

var diffSum = 0; 
for(var i = 1; i <= timesToRun; i++){ 
    var startTime = process.hrtime(); 
    targetAlgorithm(); 
    var diff = process.hrtime(startTime); 
    diffSum += diff[1]; 
    } 
    return Math.floor(diffSum/times); 
} 
相關問題