2013-10-24 132 views
5

我想知道這個代碼是否會在客戶端上加載負載,因爲超時時間太長了?setTimeout()會影響性能

 //and update this again in a bit 
     setTimeout(function() { 
      updateWeather(lat,lng); 
     }, 60000); 
+2

爲什麼會做提比什麼都不做更短的時間一分鐘造成更大的負擔? ;-) – RobG

+0

不,它不是。但是,超時時間可能很短:http://stackoverflow.com/a/18832977/1768303 – Noseratio

+1

根本沒有顯着影響,'setTimeout'在事件循環中運行,它不會阻止或損害執行。 –

回答

2

不是單獨的代碼。系統閒置那一分鐘。只要updateWeather沒有嚴重的性能問題,間隔時間短,setTimeout將不會是一個產品(我相信你的意思是setInterval,而不是setTimeout重複檢查)

+0

從你提到setInterval開始就選擇了你的答案 - 我想我應該在這種情況下使用setInterval,因爲這個示例代碼實際上在updateWeather函數本身內部,在函數的結尾。這是一個壞idéa,是否有使用setInterval比setTimeout性能改善,或者他們只是相同,是setInterval只是一個方便的方式不必做這個自我調用,我呢? –

+0

我自己並沒有對它進行基準測試,但就優雅而言,setInterval更好。我現在將運行一個基準。 – bobbybee

0

的回答你的問題取決於:

  1. 的環境中執行此設備 - 有多少次你執行這個

一個獨立的setTimeout會不傷瀏覽器;但是,如果你反覆做同樣的事情,它會有所作爲。

看一看下面的網站獲取更多的見解......

http://ejohn.org/blog/analyzing-timer-performance/

1

60秒計時器是由魔術師在OS中:它在等待的60秒內基本上不增加CPU負載。

我想updateWeather()是輪詢一個外部資源,所以你的問題的答案是一個簡單的「不,它很好」。 (因爲天氣不會改變經常,我會讓它5分鐘,而不是,看下面的電池壽命評論。)(更好:看看是否天氣數據提供給你一個領域告訴你,當下一次更新將並在此基礎上使用setTimeout)。

在其他情況下,例如,如果您一直在爲這60秒收集某種數據,然後再一次處理它,則可能會導致峯值的重負荷。哪些可能會被用戶注意到(例如,所有動畫每60秒會出現一次干擾)。在這種情況下,最好使用5秒計時器,並一次處理5秒鐘的數據。相反,如果您在移動設備上使用網絡,則必須考慮電池使用時間:喚醒並發現連接可以占主導地位。因此,將輪詢時間從60秒延長到120秒可以使電池壽命延長一倍。伊利亞·格里戈裏克在他的書中,高性能瀏覽器網絡,http://shop.oreilly.com/product/0636920028048.do 上這是一個非常好的章節......這就是:http://chimera.labs.oreilly.com/books/1230000000545/ch08.html#ELIMINATE_POLLING