2011-08-04 12 views
4

有JS optimalization導致活動標籤頁在FF5和鉻減緩的setInterval()和setTimeout的()。我已將它設置爲66毫秒,但當選項卡處於非活動狀態時,它會達到1000。解決方法FF5和鉻的setInterval(),setTimeout的()

沒有辦法確定,當標籤處於非活動狀態過了多少時間,但我需要的js繼續運行和執行的操作,例如播放聲音一些事件。有沒有辦法實現這一目標?

回答

1

那些夾的全部要點是保持背景的網頁使用過多的CPU。哪些事件,即使用戶無法看到標籤,您在15Hz時是否也需要播放聲音?

+0

我明白了這個限制的原因。我們正在像瀏覽器中的虛擬足球比賽一樣玩,而實際上倒數第二次只有66ms。每66ms有一些動作發生,如移動時鐘或發生某些事件 –

+0

@Michal Kikta如果心跳計時器未在15Hz時觸發,您是否可以不合並更新?也就是說,在後臺選項卡中,計時器每秒鐘都會觸發,並且您將在15秒內完成所有工作。 –

+0

coalescation是答案,它來到我的腦海。我可以在一秒鐘內將所有15個動作分組到一次,對於用戶而言,只要他在另一個標籤上就不會有區別。這可以用一些不太長碼並沒有顯著chcanges到應用程序來完成,THX –

1

Mozilla正在開發一種實現setInterval和setTimeout的不同方式,稱爲requestAnimationFrame,它可以幫助您解決問題,或者希望將來的更新能夠解決問題。

注意,它是一個實驗性的功能,尋求跨瀏覽器支持的限制時要小心。

https://developer.mozilla.org/en/DOM/window.mozRequestAnimationFrame

+0

看起來praety體面,它在這兩個chorme和FF正在實施,但它看起來像在非活動標籤 –

+0

放慢「回調的數量通常每秒60次,但通常符合W3C推薦的大多數網頁瀏覽器的顯示刷新率,在後臺標籤中運行時,回調率可降低到更低。 https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame – zamnuts