バックグラウンド タブは、ブラウザのパフォーマンス(特にバッテリー駆動時間)に大きな悪影響を及ぼす可能性があります。これを軽減するため、Chrome には バックグラウンドタブにさまざまな制限が課せられました 近年 さらなる改善に向けて多くの取り組みが 行われています このドキュメントでは、Chrome ポリシーの概要を説明します。 このドキュメントでは、Chrome 57 の現在のポリシーについて説明します。長期戦略と今後の計画については、 こちらのドキュメントをご覧ください。
バックグラウンドでのアプリケーションの最適化
バックグラウンドで多数のタブが開いている場合が多いことに、ウェブ デベロッパーには注意が必要です。 消費電力とバッテリー駆動時間に深刻な影響を及ぼす可能性があります。バックグラウンドで動作させる 最小限に抑える必要がありますが、 向上させることができます「 Page visibility API を使用する ページがバックグラウンドになったことを検出し、視覚的な更新などの不要な作業をすべて中断します。
一部のサイトでは、この簡単な最適化によって CPU 使用率を最大 75% 削減できます。
var doVisualUpdates = true;
document.addEventListener('visibilitychange', function(){
doVisualUpdates = !document.hidden;
});
function update() {
if (!doVisualUpdates) {
return;
}
doStuff();
}
ポリシー
requestAnimationFrame()
こちらのドキュメントによれば、
ページがバックグラウンドの場合、Chrome は requestAnimationFrame()
を呼び出しません。
この動作は 2011 年から行われています。
バックグラウンド タイマーの調整
Chrome 11 以降、 独立したタイマーが 1 秒に 1 回しか実行されない。Chrome では、これらのタイマーを 1 秒間に 1 回バッチで実行し、プロセスのウェイクアップ回数を最小限に抑えます。可聴オーディオを再生しているページはユーザーに表示されるとみなされ、バックグラウンド タイマーから除外されます 軽減されます。免除は、音声の再生が停止してから数秒間続き、アプリが次の音声トラックをキューに追加できるようにします。
音声は、Chrome に音声アイコンが表示されている場合にのみ、聞こえる音声と見なされます。無音の音声ストリームは免除の対象外です。
予算ベースのバックグラウンド タイマーのスロットリング
Chrome 57 でリリースされた予算ベースのタイマー スロットリングは、タイマーの調整メカニズムのさらなる拡張であり、バックグラウンド タイマーの CPU 使用量に追加の制限を設定します。次のように動作します。
- 各バックグラウンド タブには、バックグラウンドでタイマーを実行するための時間(秒単位)が設定されています。
- バックグラウンドで 10 秒間が経過すると、ページに時間制限が適用されます。
- タイマータスクは、時間バジェットが負でない場合にのみ実行できます。
- タイマーが実行されると、その実行時間がバジェットから差し引かれます。
- 予算は時間とともに継続的に再生成されます(現在は 1 秒あたり 0.01 秒のレートに設定されています)。この予算再生成率は、スロットリング動作に関するデータを Chrome が収集するにつれて調整できます。
このスロットリングでは、いくつかの自動除外があります。
- 音声を再生するアプリはフォアグラウンドと見なされ、スロットリングされません。
- リアルタイム接続(WebSocket と WebRTC)を使用するアプリケーション。タイムアウトによって接続が閉じられないようにします。1 秒に 1 回実行されるランタイム ルールも、 適用されます。
なお、このメカニズムでは CPU 時間ではなく経過時間を使用します。 これは CPU 時間の近似値であり、メインスレッドをブロックするペナルティが 長い時間。
最後に、長時間のタスクをバックグラウンドで使用している場合、
非常に長い期間(タスクの期間の 100 倍まで)スロットリングできる。
パフォーマンス ガイドラインに従って、処理を 50 ミリ秒以下のチャンクに分割し、visibilityChange
リスナーを使用して、バックグラウンドで不要な処理が行われないようにします。
オプトアウト
Chrome には、次のようなユースケース向けに --disable-background-timer-throttling
フラグが用意されています。
テストスイートやユーザーが承認したその他の負荷の高い計算の実行。