Chrome のメモリ使用量の削減は、今年のチームの最優先事項の一つです。V8 のガベージ コレクション プロセスの改善により、Gmail のメモリ使用量は最大で 45% 削減されましたが、これはまだ始まったばかりです。メモリ使用に関する次の実験のひとつは、(私自身のように)タブをためらうことを目的としています。これはタブの破棄と呼ばれます。
タブの破棄機能は、Chrome 46 以降で試験運用版として利用できます。
背景情報
ほとんどのユーザーは一度にタブを 1 つだけ使用しますが、開いているタブごとにレンダラ プロセスの処理には通常、タブあたり 50 MB ほどかかります。10 個のタブを開いている場合は、バックグラウンドのタブの状態を維持するためだけに、少なくとも 450 MB のメモリが消費されます。これは、時間が経つと少し扱いにくくなる可能性があります。
Google の目標の 1 つは、実際には使用していないタブで使用されるメモリを減らすことです。Chrome タスク マネージャーでシステムメモリを消費しているタブを見ると、下のサイトのうち 1 つまたは 2 つしか「使用」しているだけであり、バックグラウンドの他のタブは使用されていません。
そのような場合、タブの破棄によってメモリ使用量を削減できます。
使用していないタブを破棄しています
タブの破棄機能では、システムメモリの低下が検出された場合に、不要なタブを自動的に破棄できます。 破棄するとはどういう意味ですか?破棄したタブはどこにもいきません。強制終了しても、Chrome のタブバーには引き続き表示されます。破棄されたタブに戻ると、クリックすると再読み込みされます。フォームのコンテンツやスクロール位置などは、タブを進む/戻るに移動するときと同じように保存、復元されます。
また、すべてのタブリソースをローカルにキャッシュできる新機能も追加されています。これは、オフライン時にタブを破棄する場合に効果的です。タブが再びアクティブになったら、以前にネットワーク経由で読み込んだキャッシュ バージョンを再読み込みする選択肢が提示されます。キャッシュからのページの再読み込みを有効にするには、chrome://flags/#show-saved-copy
で別のテストを行います。
タブの破棄は、chrome://flags/#enable-tab-discarding
で有効にして Chrome を再起動することで、今すぐお試しいただけます。これを有効にするか無効にするかは、同じ Chrome chrome://flags
ページで制御できます。
chrome://discards
という新しいページでは、現在開いているタブを一覧表示し、ユーザーが関心を持っているタブを多い順に紹介します。
この機能を試すには、システムが低メモリモードになるまで通常のブラウジング動作を続けるか、[今すぐタブを破棄] をクリックして about:discards からタブ破棄をトリガーします。これにより、リストの最後のタブが破棄されます。対応する [破棄] ボタンをクリックして、リストから特定のタブを破棄することもできます。破棄されたタブには [破棄] という接頭辞が表示されます。
タブを破棄すると、次の順序でタブが破棄されます。
- 新しいタブページ、ブックマークなどの内部ページ
- かなり前に選択済みのタブ
- 最近選択したタブ
- ウィンドウで実行されているアプリ
- 固定タブ
- 選択したタブ
Windows 版と Mac OS 版の Chrome Canary でタブ破棄のテストを有効にしました。Linux の実装は近日提供予定です。
インスピレーション: 優れたサスペンダー
タブの破棄に馴染みがある方は、The Great Suspender など、この考え方を少しシンプルにした便利な Chrome 拡張機能を目にしているのではないでしょうか。Great Suspender は、一定時間操作しないタブを一時停止することで、Chrome のメモリと GPU のフットプリントを削減することを目的としています。
タブの破棄と同様に、タブは再度操作する必要がある場合に一時停止を解除できます。Great Suspender では、各タブのタイトルとファビコンが維持され、一時停止したタブがグレー表示されて、いつでも簡単に戻ることができます。
アクティブに使用していないバックグラウンドのタブは一時停止され、メモリを節約できます。現在もアクティブに使用しているタブ(GitHub と YouTube)は通常どおり実行されています。
タブの破棄機能を開発するにあたり、 Great Suspender 拡張機能の作成者と素晴らしいチャットを交わすことができました。Google は、ユーザーが操作していない状態を失うなど、拡張機能よりも効率的な方法でこの問題にネイティブで取り組んでいることを嬉しく思います。
今後の改善: タブ シリアライザ
タブ シリアライザは、タブの破棄に対する現在のアプローチを大幅に改善する可能性のある将来の作業です。Chrome のタブの内容を取得し、「現在の」状態をバイナリ blob にシリアル化します。このバイナリ blob は、後でタブにシリアル化解除できます。
シリアライザは、Chrome、Blink、V8 でタブを適切に保持するために必要なほぼすべてのものをシリアル化します(これまでこの問題に対処する Chrome 拡張機能では、簡単には実現できませんでした)。シリアル化には、通常は DOM(多くの WebGL と Canvas を含む)、CSS、V8 JavaScript VM の状態が含まれます。
Android または ChromeOS を使用している場合は、この投稿で紹介したタブ破棄のテストと同様に、メモリ使用量を抑えるためにバックグラウンド タブが積極的に強制終了されます。この問題への対処方法の問題は、タブの状態が *すべて* 失われることです。
再度タブに興味を示した場合は、タブを再読み込みする必要があり、そのタブに対するすべての操作が失われます。タブ シリアライザはこの問題にアプローチするだけで、ネットワークに戻ることなく、前回とほぼ同じ状態に戻れます。この取り組みの詳細については、後日お知らせする予定です。
タブの破棄を試して、ご意見をお聞かせください
この機能が役に立ったかどうか、改善すべき点をお聞かせください。いろいろと試してみて(特にタブをためらっている場合は)、コメント欄でご意見をお聞かせください。また、crbug.com で見つけたバグについてチケットを発行していただけると幸いです。