2011-08-04 17 views
4

jsの最適化により、非アクティブなタブがff5とchromeのsetInterval()とsetTimeout()を遅くする原因となりました。私はそれを66ミリ秒に設定しましたが、1000までのwhneタブは非アクティブです。FF5とクロムsetInterval()、setTimeout()の無効なタブの回避策

タブが非アクティブになっていた時間がどれくらいかを判断する方法はありますが、一部のイベントでサウンドを再生するようなjsの実行と実行が必要です。それを達成する方法はありますか?

答えて

1

クランプのポイントは、バックグラウンドページのCPU使用量を抑えることです。ユーザーがタブを見ることができなくても、サウンドを再生する必要がある15Hzでどんなイベントが起こっているのですか?

+0

なぜこの制限があるのか​​はわかります。我々は、ブラウザでのvirtul footblaの試合のようなsthを演奏しているし、実際の2番目の最後のわずか66ms。 66msごとにクロックを動かしたり、何らかのイベントが行われているようなアクションがいくつかあります –

+0

@Michal Kiktaハートビートタイマーが15Hzで起動しないと、更新をまとめることはできませんか?つまり、バックグラウンドタブでタイマーは毎秒発火し、15秒間プレイするとすべての作業を行います。 –

+0

合意が答えです、それは私の心に来ました。一度に15アクションをすべて1秒間にグ​​ループ化することができ、別のタブにいる限りユーザーにとっては違いはありません。これは、あまりにも長いコードではなく、アプリケーションに重要なchcangesを使わずに行うことができます。 –

1

Mozillaは、requestAnimationFrameと呼ばれるsetIntervalとsetTimeoutを実装する別の方法で作業しています。おそらく、あなたの問題の解決に役立つかもしれません。

実験的な機能であることに注意してください。クロスブラウザーをサポートする場合は、制限に注意してください。

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

+0

chormeとffの両方で実装されていますが、非アクティブなタブでは遅くなるようです。 –

+0

"コールバックの数は通常は毎秒60回ですが、W3C勧告に従ってほとんどのWebブラウザで表示リフレッシュレートとほぼ一致しますバックグラウンドタブで実行するとコールバック率が低下する可能性があります。 https://developer.mozilla.org/en-US/docs/Web/API/window.requestAnimationFrame – zamnuts