2021年10月5日にリリースされた「Firefox 93」には、システムの使用可能メモリが残り少ないときに自動的にタブをアンロードしてメモリ領域を解放する機能が追加されました。この機能の詳細をMozillaのソフトウェアエンジニアであるHaik Aftandilian氏が解説しています。

Tab Unloading in Firefox 93 - Mozilla Hacks - the Web developer blog

https://hacks.mozilla.org/2021/10/tab-unloading-in-firefox-93/

◆タブのアンロード機能の概要

タブのアンロード機能は、システムの使用可能メモリが残り少なくなった際に「ユーザーが使用していないタブ」を判断してアンロードすることでFirefoxのクラッシュを防ぐ機能です。Aftandilian氏によると、この機能は「メモリ搭載量が少ないシステムを用いるユーザー」「Firefoxの他にゲームなどのメモリを大量に消費するソフトウェアを実行しているユーザー」「大量にメモリを消費するウェブページを開いたユーザー」「非常に多くのタブを同時に開くユーザー」などにとって有益とのこと。

また、Firefox 93のリリース時点ではタブのアンロード機能はWindows向けに提供されています。Aftandilian氏は「WindowsではFirefoxのクラッシュの主な原因はメモリ不足です。タブのアンロード機能によってFirefoxはメモリ不足によるクラッシュを減らし、ウェブブラウジングの中断を回避できます」と語っています。



◆Windows向けの実装に至った経緯

Firefoxの開発チームは、以前にもタブのアンロード機能をWindows向けにテストしていたとのこと。しかし、アンロードしたタブをリロードする際にユーザーを待たせてしまうことから、「ブラウザのメモリ使用量を削減することと、ユーザーの使用感を悪化させることのバランスをとることが困難」として正式採用は見送られていました。今回Firefox 93に実装されたタブのアンロード機能では、「ユーザーが使用していないタブを判断するアルゴリズム」を搭載したり、メモリ残量が少なくなりブラウザがクラッシュしそうな時に動作を限定したりすることで、使用感を損なわずにFirefoxのクラッシュを抑えることに成功しています。

FirefoxのNightly版で1カ月間行われてテストでは、タブのアンロード機能を有効にしたFirefoxでは、それ以外のFirefoxと比べてFirefoxがクラッシュする回数が大幅に減少し、連続動作時間が長くなったとのこと。一方で、クラッシュ全体に占めるメモリ不足が原因のクラッシュの割合は増加し、平均メモリ使用量が増加したことも確認されました。

Aftandilian氏は、メモリ使用量が増加した理由について、アンロード機能によって適切にクラッシュが回避されたおかげで、これまでのFirefoxではクラッシュするようなメモリ使用量のまま使い続けることができたことが原因だと説明しています。また、メモリ不足が原因のクラッシュの割合が増加した理由は「タブのアンロードのタイミング」「Windowsのメモリ管理機能との相性」などの原因が考えられるものの、詳しい原因は不明とのこと。それでも、クラッシュの減少によって明らかに使用感が向上したとして、タブのアンロード機能の搭載に踏み切りました。

◆タブがアンロードされるタイミングは?

Windowsは、メモリの空き容量が約6%を下回ると実行中のアプリケーションにメモリ不足を通知します。Firefoxはこの通知を受け取るとWindowsのメモリ監視APIを利用してシステムのメモリ残量を監視し、メモリ残量が「browser.low_commit_space_threshold_mb」で設定されたしきい値を下回った際にタブをアンロードします。



Aftandilian氏によるとメモリ残量が不足しても十分なサイズのページファイルが存在すれば、動作が遅くなるもののクラッシュは避けられるとのこと。そのため、Aftandilian氏は「大容量のメモリを搭載している場合はスワップ領域を作成する必要がないと考える人がいますが、それは良い考えではありません!」と述べ、ページファイルの作成を推奨しています。

◆アンロードするタブの選択基準は?

Firefox 93では、最近使用されていないタブを優先的にアンロードします。また、サウンドを再生するタブや、ピクチャーインピクチャーを実行しているタブ、ピン留めされたタブ、ビデオ会議や音声チャットに利用されているタブは、アンロード対象から除外されるとのこと。

Aftandilian氏は「Firefoxのパフォーマンスを維持し、ユーザーの邪魔にならないようにしながらクラッシュを減らすことを目指して、さらに実験を行いアルゴリズムを調整し続ける予定です」と述べています。また、Firefox 94にはタブのアンロード機能を手動管理するための設定画面「about:unloads」が実装される予定です。



◆タブのアンロード機能を提供する拡張機能との共存

Firefoxの拡張機能の中にはタブをアンロードする機能を持ったものが存在しています。これらの拡張機能はAPI「tabs.discard()」を基に動作しており、Firefox 93に搭載されたタブのアンロード機能と共存することが期待されるとのこと。また、Firefox 93に搭載されたタブのアンロード機能は、システムのメモリ残量が非常に少ない場合にのみ動作するため、拡張機能を用いることで標準機能よりも多くのメモリを確保できる可能性があるとAftandilian氏は指摘しています。

Firefox 93のリリース時点ではタブのアンロード機能はWindows向けに提供されており、今後macOSやLinuxにも対応する予定とのこと。また、Firefox 93のその他の新機能や変更点は、以下の記事で確認できます。

「Firefox 93」正式版リリース、AVIFをサポート&タブの自動アンロード機能が追加されてメモリ使用量が低下 - GIGAZINE