2014-03-25 127 views
0

我要計算一個函數的平均運行時間在JavaScript這樣的:Caculating功能運行時間

time = 0; 

while(1000) { 
    time1 = performance.now(); 
    function(); 
    time2 = performance.now(); 
    time += (time2-time1); 
} 

的問題是,只有第一個循環的時間間隔約爲60ms和下面的循環間隔幾乎爲零。 所以我改變了代碼:

time1 = performance.now(); 

while(1000000) {  
    function(); 
} 

time2 = performance.now(); 
time = (time2-time1); 

的運行時間大約爲4 seconds

我想也許是因爲自動優化。

如果是這種情況,是否有任何方法來關閉優化?

+0

我假設只是在任意的參數投擲會有所幫助,即'函數(I);'與循環迭代計數被'i'。只是一個假設,但沒有測試過這一點。 – SmokeyPHP

回答

0

您最有可能導致瀏覽器將該代碼交給其JIT編譯器。第一次運行總是通過解釋器(緩慢)。熱門代碼通過JIT,然後使用生成的本機(快速)代碼。

這是自動的,一般不在您的掌握之中。您可以通過在腳本中使用'with'來禁用Firefox JIT編譯器。

with({}) {} 

將此添加到您的腳本的頂部,並且您的腳本的JIT將被禁用。

0

您還可以使用console.timeconsole.endTime函數來計算運行時間。

例如:

console.time('profile 1'); 
    for (var i=0; i < 100000; i++) { 
    var arr = new Array(); 
    } 
    console.timeEnd('profile 1');//profile 1: 108.492ms 

    console.time('profile 2'); 
    for (var i=0; i < 100000; i++) { 
    var arr = []; 
    } 
    console.timeEnd('profile 2');//profile 2: 81.907ms