リアルタイムの統計を表示するページがあります。多くの JavaScript を実行し、多くの HTTP リクエストを作成し、D3.js を使用して数秒ごとに SVG チャートをレンダリングし、多くの CSS アニメーションを使用し、DOM を頻繁に再配置します。
ページがフォーカスされている限り、スムーズに実行されます。別のタブに切り替えて後で戻ると、ビューが突然再レンダリングされてページが再び使用可能になる前に、ページがフリーズしたように見える短い一時停止がしばしばあります。タブがバックグラウンド化されている時間が長いほど、この一時停止は長くなります。タブが非常に長い時間 (数時間) バックグラウンドにあり、再び切り替えると、長時間フリーズしてからクラッシュします。
これらの動作はすべて Chrome で観察されます。他のブラウザではあまりテストしていません。
タブがバックグラウンドにある間、Chrome は何をしていませんか? また、最初にタブに戻ったときの一時停止中に Chrome は何をしていますか?
アップデート:
また、jQuery のアニメーション化も行っています。この回答 とこれが関連している可能性があります。
その最初の答えによると:
「非アクティブなブラウザ タブは、setInterval または setTimeout 関数の一部をバッファリングします。」
stop(true,true) は、バッファリングされたすべてのイベントを停止し、最後のアニメーションのみをすぐに実行します。
コードに .stop(true, true) への呼び出しを追加しましたが、少なくともタブから離れた短い旅行では、しゃっくりを検出していません。長い間バックグラウンドに置いておき、大きな違いがあるかどうかを判断する前にテストする必要があります.