2013-10-11 37 views
2

我使用setTimeout來運行一個JavaScript程序,它將使用AJAX獲取外部數據並每1000毫秒或更新一次頁面的內容。爲什麼JavaScript setTimeout在另一個選項卡中滯後?

當我的網頁所在的選項卡位於最前方時,此功能完全正常。但是,如果頁面在帶有多個選項卡的瀏覽器窗口中運行,並且用戶當前不在該選項卡中,則setTimeout將開始滯後(在一分鐘內,而不是更新60次,它只會更新大約30次)。

但是,如果網頁位於後臺瀏覽器窗口的最前端,那麼setTimeout將繼續以正確的速度運行。

有人可以解釋爲什麼會發生這種情況,以及解決這個問題的方法嗎?

+0

這可能會爲您提供答案:https://developer.mozilla.org/en/docs/Web/API/window.setTimeout#Minimum.2F_maximum_delay_and_timeout_nesting – jeff

回答

3

當選項卡未激活時,瀏覽器禁用定時器頻率以節省用戶的電池使用時間。

+0

有沒有什麼辦法可以得到這個?我在另一個網站(progamingleague.com)上查看JavaScript定時器,甚至當我切換標籤時,它們的計時器仍然準確運行。我有什麼替代方案? – Charles

+0

這不是在程序控制之下。這是現代瀏覽器所做的事情。你可以做的最好的辦法是檢查時鐘,看看你的計時器是如何運行的,以及它如何運行。 – Pointy

+0

你究竟是什麼意思?「檢查時鐘,看看你的計時器是如何運行的,而不是它認爲它正在運行。」是否需要在開始時記錄系統時間,然後計算每個1000毫秒的間隔數並將其與實際系統時間進行比較? – Charles

相關問題