2012-08-24 53 views
0

我試圖找出捕捉語句執行時間的最佳方法。例如,js stmt花費的時間如if(txt =='abc')。如果我使用console.time('test')/ console.endTime('test')對來計算或簡單的js代碼(下面給出)來計算每次執行代碼時控制檯輸出不同的時間。JavaScript的執行時間各不相同

在控制檯上看到的差異有時也是1位數字,2位數字到3位數字,以毫秒爲單位,即某些時間1毫秒,60毫秒&有時800毫秒的順序不一致。我甚至試圖只運行一次&關閉瀏覽器&再次運行它,以便其他GC &變量不會影響時間,但結果是相同的。幾毫米是undestandle,但如此巨大的差異很大,以獲得明確的時間。那麼究竟是什麼纔是最好的解決方法來獲得時間的一致方式。我們如何能找到最好的準繩,以證明寫在特定的方式時或者最好使用

var start = (new Date).getMilliseconds(); 
if(txt =='abc'){}; 
var diff = (new Date).getMilliseconds() - start; 
console.log(diff); 

* 所有的測試都在FF進行哪些語句執行得更好。也有不同的方法,例如getMilliseconds,的getTime & console.endTime其他*

+0

您可能會發現從http://stackoverflow.com/questions/2140716/how-to-profile-and-and一些幫助-get-javascript-performance –

+0

單個if語句將需要不可測量的時間量。它取決於調度程序執行是否暫停,以及其他一些計算(UI線程,垃圾回收等)將在繼續之前發生... – Bergi

+0

使用類似[jsperf](http://jsperf.com)的工具。 – Sirko

回答

1

呃..你使用的兩種截然不同的功能檢索當前時間戳後拍攝第一。

Date.prototype.getMilliseconds() 

返回比

Date.prototype.getTime() 

另一個(短)號碼,以便不是一般一個好主意,是最有可能對你的問題的原因。如果您想測量代碼內容,則應該始終使用.getTime()或更好的Date.now()。兩者都返回一個完整的時間戳編號。

+0

無論你每次運行或嘗試都不重要關閉瀏覽器的測試結果變化很大,甚至沒有遵循任何模式 – user593029

+0

它很重要。僅僅因爲使用mixins這兩種方法,它永遠無法正常工作。 – jAndy

+0

他們被一個接一個地嘗試在mixin已經進入圖片 – user593029

0

這裏的要點是執行這條指令的時間在大多數情況下遠遠小於0ms,所以我不明白你爲什麼會得到這些差異。如果我在我的機器上運行:

for (x = 0; x < 100; x++) {      
    var start = (new Date).getMilliseconds(); 
    if(txt =='abc'){}; 
    var diff = (new Date).getMilliseconds() - start; 
    print(diff); 
} 

我得到:

0 
0 
0 
0 
... 
相關問題