爆速進化したブラウザ「Firefox Quantum」は何がどう変化したのか?


ベータ版として2017年9月にリリースされた「Firefox Quantum」が、11月14日に正式版の「Firefox 57」としてリリースされました。Chromeと比べても高速で、1年前に発表されたFirefox 52と比べると約2倍高速なブラウザに進化したとのことですが、一体何がどう変化したのかをFirefoxを開発するMozillaがブログ上で説明しています。

Entering the Quantum Era—How Firefox got fast again and where it’s going to get faster – Mozilla Hacks – the Web developer blog
https://hacks.mozilla.org/2017/11/entering-the-quantum-era-how-firefox-got-fast-again-and-where-its-going-to-get-faster/

2016年10月にMozillaが並行処理型レンダリングエンジン「Servo」をベースとした高速次世代ウェブエンジン「Project Quantum」を発表。Project Quantumから派生した技術として、たった15秒で1600以上のタブを起動可能でメモリ使用も劇的に改善される「Quantum Flow」なども登場しているのですが、これらをまとめた「進化したブラウザ」としてFirefox Quantumが登場しています。2017年9月にベータ版としてリリース以降、デベロッパー界隈などでその存在が注目されてきたFirefox Quantumは、一体何がどう高速になったのでしょうか。

◆ChromeとFirefoxの間にあった大きな差
そもそもブラウザを高速化するには、過去10年でハードウェアがどのように進化してきたのかを知る必要があります。Chromeは最初に登場した時から、Firefoxよりも高速かつレスポンシブなブラウザです。その理由のひとつは、Chromeのエンジニアがハードウェアでどのような変化が起きているのかをしっかり確認し、新しいハードウェア上でChromeが使いやすいように改良を続けてきたからです。


Chromeの登場以降、新しいスタイルのCPUが普及していきました。「新しいスタイルのCPU」というのは複数のコアを持ったものを指し、これらはひとつひとつのコアが独立したタスクを実行可能です。しかし、マルチコアCPUで並列処理を行うと、デバッグが難しくバグが起きやすくなります。例えば、並列処理を行う2コアが同じ「1」という数字をメモリに書き込まなければいけない場合、特別な注意を払わなければ、片方のコアによる「1」という書き込みはもう片方の書き込みを上書きしてしまう可能性があります。

この種のバグを避ける簡単な方法は、作業している2つのコアがメモリを共有しないで済むようにすることで、例えば協力する必要がないまったく別のタスクを割り当てたりすればOKというわけ。これはいわゆる粗野な並列処理です。ブラウザではこのような「粗野な並列処理」を見つけることがかなり簡単で、例えばブラウザで開く各タブは個別タスクとみなすことが可能。

ページの読み込みではお互いの動作や読み込み速度を妨げることなく並列処理が可能。また、バックグラウンドタブに長時間実行しているスクリプトがある場合、フォアグラウンドタブの読み込みを邪魔することもありません。これらの特徴はChormeのエンジニアがさまざまな物事を予測した結果生まれたものであり、Firefoxで同じような動作を実現するには長く険しい道のりが待っていたとのこと。


そんな長く険しい道のりをたどることで誕生した機能が以下の3つ。

・Electrolysis
ElectrolysisはProject Quantumの基礎を築いた技術のひとつです。Chromeが導入したマルチプロセスアーキテクチャーの同種のもので、Firefoxでは2016年に小規模なユーザーグループでテストを行い、2017年6月に全ユーザー向けにリリースされました。ブラウザの動作を高速化するために8年以上かけて開発されてきた技術ともいわれており、特定のアドオンのせいで恩恵を受けられないケースもあるとのことなので、気になる人は以下の記事をチェックしてみてください。

Firefox 54で全ユーザー向けに導入されたブラウザ高速化技術「Electrolysis」がオンにならない場合の対処法 - GIGAZINE


・Quantumコンポジター
Quantumコンポジターにおける最大の目標は、Firefoxの動作を安定させることでした。これまではグラフィックドライバがクラッシュしてしまえば、Firefox全てがクラッシュしてしまうということとなっていましたが、Quantumコンポジターで別のプロセスを持つことで、Firefoxの応答性が向上しているとのこと。

なお、Firefoxの正式版にQuantumコンポジターが搭載されたのは2017年4月にリリースされたFirefox 53からです。

「Firefox 53」正式版リリース、セキュリティと性能を向上させる「Project Quantum」のコンポジターを搭載 - GIGAZINE


・Quantum DOM
CPUのコア間でコンテンツウィンドウを分割し、それぞれのメインスレッドが別々であったとしても、メインスレッドが実行すべきタスクはまだまだたくさんあります。そして、メインスレッドが実行しなければいけないタスクのいくつかは、実行中のものよりも重要度が高い場合があります。例えば、どのキーを押したか反応するタスクは、ゴミ箱の中のデータを処理するより重要なタスクです。 Quantum DOMではこれらのタスクに優先順位を付ける方法を提供するもので、これによりFirefoxの応答性が向上します。

◆「粗野な並列処理」を超えた並列処理でハードウェアを最大限に活用
粗野な並列処理はハードウェアをより活用できるようにしてくれますが、これではハードウェアの能力を最大限活かすことはできません。例えば別々のウェブページをCPUのコアひとつひとつが処理すると考えると、一部のウェブページの読み込みが簡単だとすると、他のコアが作業している間、作業が終わったコアはアイドル状態になります。また、別のコアではページを読み込む必要があるので、そちらではシングルコアが動作するだけなので時間がかかってしまいます。


この待ち状態となってしまうコアを減らせば、CPUをより有効に活用することにつながり、ウェブページの表示速度も向上するはずです。しかし、粗野な並列処理ではあるコアから別のコアに作業を割り振るようなことはできません。そこで登場したのが、Firefoxの「きめの細かい並列処理」です。大きなタスクをより小さなタスクに分割することで、同じページの読み込みを別々のコアで担当できるようにしています。例えば、Pinterest上に表示される写真を、写真ごとに別々のコアに処理させるといったことが可能になります。


これによりレイテンシーを少なくするだけでなく、純粋なページロード速度も向上します。また、CPUのコア数が増えれば増えるほどページの読み込み速度が向上するという特徴もあります。

元々Mozillaは「きめの細かい並列処理」のアイデアを持っていたそうですが、それを実現するための方法がはっきりしていなかったそうで、実現のためにMozillaは「Rust」とブラウザエンジンの「Servo」を作成し、より高速でバグの少ないブラウザを開発することに成功しています。そのために活用された技術が以下の3つ。

・Quantum CSS(Stylo)
Styloでは、CSSスタイルの処理がすべてCPUコアで並列化されます。ワークスティールと呼ばれる手法を用いることで、コア間の作業を効率的に分割し、すべてのコアがビジー状態になるようにします。これにより、大幅なスピードアップが見込まれ、CSSスタイルの処理にかかる時間を短縮できます。


・Quantum Render(featuring WebRender)
高度に並列化されたハードウェアにおいて重要な要素のひとつがGPUです。GPUは数百あるいは数千のコアを持っており、これらのコアができる限りビジー状態になるようにすることで、データをより高速処理可能となります。そのために使用されるのがWebRenderです。ただし、WebRenderは2018年に登場予定です。

・その他
レンダリングパイプラインの他の部分も「きめの細かい並列処理」の恩恵を受けると考えられており、Mozillaは「今後数か月にわたり、これらの技術をどこで応用可能か詳しく調査していきます」としています。

◆Firefoxが決して遅くならないように
主要なアーキテクチャの変更以外にも改良を加えることで、MozillaはFirefoxが読み込みの遅いブラウザにならないよう注力していくとしています。そんな主要アーキテクチャ以外での変更は以下の通り。

・Quantum Flow
Quantum Flowは特定のサブシステムのパフォーマンスに焦点を当てるのではなく、ソーシャルメディアフィードの読み込みなど、特殊な使用例にフォーカスし、なぜ他のブラウザよりも応答性が低いのかを調査することで生まれた技術です。たった15秒で1600以上のタブを起動可能でメモリ使用も劇的に改善するということで、Firefoxの弱点を解消することにつながる技術でもあります。

たった15秒で1600以上のタブを起動可能でメモリ使用も劇的に改善、Firefoxの弱点を解消する「Quantum Flow」の効果が明らかに - GIGAZINE


なお、MozillaのFirefox開発チームはFirefox Quantumの登場は始まりであり、2018年も継続してパフォーマンスの改善に取り組むとしています。

・関連記事
Firefoxが爆速化する「Firefox Quantum」ベータ版リリース、メモリの消費量も減りCPUをより効率的に利用 - GIGAZINE

たった15秒で1600以上のタブを起動可能でメモリ使用も劇的に改善、Firefoxの弱点を解消する「Quantum Flow」の効果が明らかに - GIGAZINE

Firefoxを爆速化させる次世代ウェブエンジン「Project Quantum」をMozillaが発表 - GIGAZINE

Firefox 54で全ユーザー向けに導入されたブラウザ高速化技術「Electrolysis」がオンにならない場合の対処法 - GIGAZINE

Firefoxでウェブ開発者に12年にわたり利用されてきたアドオン「Firebug」がFirefox Quantum登場で終了 - GIGAZINE

307

in ソフトウェア, Posted by logu_ii