2015-04-17 59 views
2

我有這個由專門的網絡工作人員執行的長時間運行的腳本,我想知道在現實世界中執行需要多長時間。web worker中的performance.now()是否可靠?

time1 = performance.now(); 
doSomethingSyncronous(); 
time2 = performance.now(); 
doSomethingAsyncronous(function() { 
    time3 = performance.now(); 
} 
doSomethingSyncrounous(); 
time4 = performance.now(); 

在這個例子中,我想時間2,時間1是doSomethingSyncronous()的實際持續時間,以同樣的方式我想時間3,時間2是doSomethingAsyncrounous的實際持續時間。

我想工作者線程可以睡覺,只要CPU想要,並用performance.now()測量的持續時間將不正確。這是一種正確的假設嗎?那麼,在網絡工作者中測量持續時間的正確方法是什麼?

謝謝!

回答

1

這聽起來像你問,如果工人實際上沒有做什麼,那麼測量的時間是否增加performance.now()?從https://developer.mozilla.org/en-US/docs/Web/API/Performance/now

由Performance.now()總是增加以恆定速率,獨立於系統時鐘(其可能被手動地調節或偏斜​​通過軟件,如NTP)

的返回值[重點礦]

因此,它強烈地表明,時間在任何時候都增加,而不僅僅是當工人正在做事情。

作爲一個測試,你可以看到http://plnkr.co/edit/alMahs56ACjzH10FUmus?p=preview當操作員只需坪回了一個短信與performance.now()

self.onmessage = function() { 
    self.postMessage(self.performance.now()); 
} 

如果調用約1秒的間隔,時間的推移增長,每次約1秒,而工作線程在實際計算中的時間是,比較少

因此,使用performance.now()來測量掛鐘時間,這包括工作人員在做什麼和不在時的情況,似乎是非常合理的。

+0

我發現如果電腦完全入睡,那'performance.now()'「會暫停。」我想這是有道理的,因爲它不受系統時鐘的影響,並且知道計算機休眠多久的唯一方法是檢查時鐘。 –

1

我想工作者線程可以睡覺,只要CPU想要,並用performance.now()測量的持續時間將不正確。這是一種正確的假設嗎?

部分地。是的,操作系統可以讓線程隨時休眠。當有更重要的工作要做,或者如果它決定節省CPU以節省電力(例如在移動設備上)時,就可以做到這一點。

但是不,這不會使持續時間測量不正確。這只是意味着你的代碼在特定的環境下運行速度較慢。