setInterval如何處理比所需間隔更長的回調函數?setInterval和長時間運行的函數
我讀過回調可能會收到延遲毫秒數作爲它的第一個參數,但我無法找到爲什麼它會遲到(抖動,或長時間運行的功能)。
精彩的後續行爲,它對普通瀏覽器的行爲有所不同嗎?
setInterval如何處理比所需間隔更長的回調函數?setInterval和長時間運行的函數
我讀過回調可能會收到延遲毫秒數作爲它的第一個參數,但我無法找到爲什麼它會遲到(抖動,或長時間運行的功能)。
精彩的後續行爲,它對普通瀏覽器的行爲有所不同嗎?
讓我由John Resig的報價約定時器的優秀article:
setTimeout(function(){
/* Some long block of code... */
setTimeout(arguments.callee, 10);
}, 10);
setInterval(function(){
/* Some long block of code... */
}, 10);
這些代碼兩塊可能會出現 在功能上等同,在第一 一目瞭然,但事實並非如此。值得注意的是, setTimeout的代碼將會一直在 至少在過去 回調執行後10ms的延遲(它最終可能 是多,但從來沒有少),而 的的setInterval將嘗試每隔10ms 無論何時來 執行回調最後回調 已執行。
如果執行時間足夠長(超過指定的延遲時間),則間隔可以無延遲地緊接着執行。
所以,簡而言之,因爲JavaScript線程都是單線程的,所以回調不能並行運行。完善。 – 2009-12-29 19:59:51
好問題。我懷疑答案是瀏覽器特定的。我們是否應該運行一些測試來發現? – 2009-12-29 19:29:55
我不會依賴收到回調的任何參數。相反,使用簡單的日期比較。這對我來說似乎是最可靠和跨瀏覽器的方法。 – 2009-12-29 19:35:37