公開日: 2025 年 1 月 20 日
Chrome 133(2025 年 2 月)以降、省エネモードが有効になっていると、CPU 使用率の高い対象のバックグラウンド タブがフリーズされます。これは、バッテリー セーバーを利用するユーザーや、バッテリー駆動時間の 1% でも節約したいユーザーのバッテリー消費を削減することを目的としています。中断を最小限に抑えるために、特定の条件を満たして CPU 使用率が高いバックグラウンド タブのみがフリーズされます。
フリーズとは
フリーズすると、ウェブページでのタスクの実行が停止します。これには以下が該当します。
- イベント ハンドラ(入力、ネットワーク、センサーなど)
- タイマー
- Promise リゾルバ
フリーズは、タブがメモリからアンロードされる破棄とは異なります。凍結されたタブにフォーカスを戻すと、タブは自動的に凍結解除され、キューに追加されたタスクは状態を失うことなく実行されます。
フリーズ イベントと再開イベントは、ページがフリーズまたは再開されたときに配信されます(Page Lifecycle API のドキュメントをご覧ください)。これらのイベントにより、ページは未使用のリソースを解放したり、ページが一時停止されていることをサーバーに通知したり、指標を記録したりできます。
フリーズできるページ
フリーズは、ブラウジング コンテキスト グループで動作します。通常、ブラウジング コンテキスト グループは 1 つのタブで構成されます。ただし、window.open()
などの API を使用する場合は、複数のタブを同じグループに含めることができます。
省エネモードが有効になっている場合、ブラウジング コンテキスト グループは次の条件を満たすとフリーズされます。
- グループ内のすべてのページが 5 分以上非表示でサイレント状態になっている。
- グループ内の同一オリジン フレームのサブグループはすべて「CPU 使用率が高い」と見なされます。
- グループは以下を実行しません。
- 音声またはビデオ会議機能を提供します(マイク、カメラ、画面/ウィンドウ/タブのキャプチャ、または「オープン」な RTCDataChannel または「ライブ」の MediaStreamTrack を含む RTCPeerConnection を使用して検出)。
- 外部デバイスを制御する(Web USB、Web Bluetooth、Web HID、Web Serial を使用して検出)。
- グループ外の操作をブロックする Web Lock または IndexedDB 接続を保持します。
「CPU 使用率が高い」の定義は今後変更される可能性がありますが、通知を生成する効率的に実装されたメール クライアントやチャット クライアント、カレンダー アプリケーションは除外されます。
同じブラウジング コンテキスト グループ内のすべてのタブを同時にフリーズすると、メッセージの作成や認証情報の入力など、ポップアップを使用するアプリの中断を最小限に抑えることができます。
サイトを準備するにはどうすればよいですか?
サイトにバックグラウンド機能(通知、ファイルのアップロード、コンテンツの更新など)がない場合、フリーズの影響を受けない可能性があります。
サイトにバックグラウンド機能がある場合は、CPU 使用率を最小限に抑えて、CPU 使用率が高いと判断され、フリーズしないようにします。ヒントをいくつかご紹介します。
- 定期的な状態変化チェックにタイマーを使用しないでください。
- IntersectionObserver を使用して、要素がビューポートに入ったタイミングを検出します。
- 要素サイズの変更を検出するには、ResizeObserver を使用します。
- DOM の変更には MutationObserver またはカスタム要素のライフサイクル コールバックを使用します。
- ポーリング サーバーではなく、ウェブソケット、サーバー送信イベント、プッシュ メッセージ、フェッチ ストリームを検討してください。
- 音声や動画の変更には、timeupdate や ended などのイベントを使用します。
また、フリーズの影響を受けないように、バックグラウンド機能をサービス ワーカーに移行することをおすすめします。フリーズの影響を受けないだけでなく、サービス ワーカーはブラウザのリソースをより少なく使用します。以下を使用することを検討してください。
- 通知用の Push API
- 更新を取得するための Background Synchronization API または Web Periodic Background Synchronization API。
サイトは、BackgroundPageFreezeOptOut オリジン トライアルに参加することで、フリーズをオプトアウトできます。このトライアルは、重要なバックグラウンド処理を宣言するための新しい API(Progress Notification API など)がリリースされると終了します。
タブの凍結の適格性は chrome://discards
で確認できます。タブがフリーズ対象であっても、CPU 使用率が高く、省エネモードが有効になっている場合にのみ、Chrome 133 でフリーズされます。
次のステップ
バックグラウンド タブをフリーズすると電力を節約できます。これは、省エネモードを有効にしているユーザーにとって重要です。
また、CPU 使用率とメモリアクセスを減らすことで、フォアグラウンド タブのパフォーマンスが向上し、特にリソースに制約のあるデバイスでバックグラウンド タブが終了するのを防ぐことができます。そのため、Chrome ではタブのフリーズをより多くの状況に拡大します(変更は blink-dev@chromium.org で発表されます)。バックグラウンドのユースケースへの影響を最小限に抑えるために、Progress Notification API などの新しい API により、ページが重要なバックグラウンド処理を宣言してフリーズを防ぐことができます。