Chrome 57 のバックグラウンド タブ

バックグラウンド タブは、ブラウザのパフォーマンス(特にバッテリー駆動時間)に大きな悪影響を及ぼす可能性があります。これを軽減するため、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 フラグが用意されています。 テストスイートやユーザーが承認したその他の負荷の高い計算の実行。