Mozilla Flux

Mozilla関係の情報に特化したブログです。

Firefox 60の性能は1年前とは別物 Chromeを視界に捉える

当ブログでは、Firefoxの延長サポート版(ESR)のメジャーアップデート時期を開発の区切りとみて、Web上で実行可能なベンチマークの測定結果を公開している。今回は、Firefox 60のパフォーマンスをFirefox 52およびChrome 66と比較する。

検証を行った具体的なバージョンを挙げると、32bit版Firefox 52.7.4(ビルドID:20180427222832)、64bit版Firefox 60.0 RC2(ビルドID:20180503143129)、それに64bit版Chrome 66(バージョン:66.0.3359.139)である。Firefox Quantumのリリースに伴ってマルチプロセス機能(e10s-multi)が全面的に有効化され、その前に64bit版への移行も開始された。今回のテストではそれらの点が反映されている。

動作環境についてだが、OSは64bit版Windows 10 Professional(Fall Creators Update)で、使用したハードウエアは、CPUがIntel Core i7-7500U CPU 2.70GHz、GPUがIntel HD Graphics 620(ドライバのバージョン:21.20.16.4542)、メモリ容量が16.0GB、ストレージがWestern Digital製SATA-IIIのHDDである。GPU描画支援はDirect3D 11、Direct2D 1.1とDirectWriteをバックエンドに使用している。

測定にあたってブラウザごとに新規プロファイルを用意し、拡張機能のインストールは行わず、テストの中断を防ぐためFirefoxではdom.max_script_run_timeの値を0に設定した。プラグインは、初期設定でインストール・有効化されるものはそのままにして、Shockwave Flash 29.0 r0を有効化している(Firefox 60では「実行時に確認する」の設定)。なお、Firefox 52ではフォントの設定をメイリオに変更した。

測定の際にはTurbo Boost機能を無効化し、定格の動作周波数でPCを動作させた。画面サイズは3840×2160で、表示を250%に拡大しており、測定時のウィンドウは最大化された状態である。なお、各ベンチマークの実行後はブラウザを終了させて、メモリ上に前のベンチマークが残らないようにした。

最後に、対象となるベンチマークは、前回の記事で用いたものから一部を入れ替えた。

ページの読み込み速度およびメモリ使用量

10のWebサイトを同時に開いて、読み込み中であることを示すアイコン(throbber)が消えるまでの時間を手動で計測した。秒数の小数点以下は切上げている。同時に、10サイトを表示させた場合と、単サイトを表示した場合のメモリ使用量もチェックした。

具体的な手順は次のとおり。以下の10サイトをその記載順にフォルダ内にブックマークしたバックアップファイル(FirefoxはJSON形式、ChromeはHTML形式)をインポートし、「タブですべて開く」で10サイトをいっせいに読み込む。throbberが消えるまでの時間を計測し、完了したらFirefoxのホームページは閉じ、各タブをクリックしてWebページを実際に画面に表示させる。つまり最後に表示されるのはWikipedia(日本語版)になる。

1分間そのまま放置した後、Firefoxでは新しいタブを開いてabout:performanceを呼び出し、"Memory usage of Subprocesses"欄に表示される、Parentつまり親プロセスのResident Set Sizeの値と、その他子プロセスの各Unique Set Sizeの値を合算する*1。Chromeではメニューの「その他のツール」から「タスク マネージャ」を選択して、各タスクのメモリ使用量を合算する*2

そして、「他のタブをすべて閉じる」でYahoo! JAPAN以外のWebページはすべて閉じる。5分間*3そのまま放置した後、再び新しいタブを開き、上記の手順でメモリ使用量を数値を合算する。ブラウザをいったん終了させ、再起動後に上記10サイトを同じ手順で開いて、throbberが消えるまでの時間を計測する。一連の手順を実行した結果を以下に示す。

Firefox 52 Firefox 60 Chrome 66
読込時間(1回目) 57 秒 15 秒 16 秒
読込時間(2回目) 23 秒 15 秒 8 秒

Firefox 52 Firefox 60 Chrome 66
使用メモリ(10タブ) 641.0 MB 1011.5 MB 970.5 MB
使用メモリ(単タブ) 459.0 MB 600.5 MB 222.7 MB

対象としたサイトとの相性が悪いのか、Firefox 52は1回目の読み込みにやたらと時間がかかった。日経電子版のリダイレクト処理が影響したとみられる。Firefox 60とChrome 66は、1回目の読み込みに関しては互角だが、2回目で差がつきChromeが最速となった。

メモリ使用量に関し、FirefoxとChromeでは測定方法が違うため、比較は難しい。だが、少なくとも拡張機能をインストールしない状態では、Firefoxのほうが省メモリだと言えるだけの根拠は見いだせなかった。Chromeはタブを閉じた後のメモリの解放がスムーズに行われている印象である。

ストレージ

HTML5 Offline Storage Benchmarkは、オフラインストレージの性能を計測するベンチマークだ。localStorage、WebSQLおよびIndexedDBを対象にできるが、ここではIndexedDBの結果(主に1ミリ秒あたりに処理されたオペレーション数)を掲載する。

Firefox 52 Firefox 60 Chrome 66
Clear 22.00 ms 14.00 ms 59.40 ms
Inject-L 2.08 op/ms 2.50 op/ms 0.12 op/ms
Inject-S 2.27 op/ms 2.94 op/ms 0.14 op/ms
InjectBulk-L 1.12 op/ms 4.82 op/ms 3.06 op/ms
InjectBulk-S 6.54 op/ms 5.03 op/ms 2.97 op/ms
Lookup 1.67 op/ms 6.25 op/ms 1.15 op/ms
Lookup2 6.37 op/ms 7.78 op/ms 3.55 op/ms

ほとんどの項目でFirefox 60はFirefox 52を上回る成績を残し、Chrome 66を圧倒している。

レイアウトおよび描画処理

HTML5 Canvas

CanvasMark 2013 version 1.1は、HTML5ゲームでよく使用される処理(ビットマップ、Canvas描画、αブレンディングなど)に対するレンダリング・パフォーマンスをテストする。

Firefox 52 Firefox 60 Chrome 66
CanvasMark Score 8583 9449 9107

Firefox 60のスコアはFirefox 52から1割アップし、Chrome 66を超えた。

WebGL

Microsoft Edge TestDrive demosからFishGLをピックアップし、水槽内の魚の数を150匹に設定してテストを実行した。 このテストは、主にWebGLに関する処理性能を測定する。

Firefox 52 Firefox 60 Chrome 66
秒間フレーム数 10 fps 8 - 9 fps 11 fps

ほとんど差がつかなかったが、Firefox 60のフレームレートが若干落ち込んでいるのは気になるところだ。

次に、Unity WebGL Benchmarks 2015年版での結果を見てみよう。このベンチマークは、Unityの開発したグラフィックスエンジンが一定時間内にどの程度のタスクを処理できるかをテストするものだ。Unity Blogの記事によれば、Unity 5.3がベースになっているという。

Firefox 52 Firefox 60 Chrome 66
Overall Score 44228 55864 50612

CanvasMark 2013と似たような傾向にあるが、こちらはFirefox 60のスコアがFirefox 52比で26%アップと伸びが大きい。

総合

MotionMark 1.0は、WebKitチームが提供するベンチマーク・スイートであり、複雑なシーンを目標フレームレートでアニメーションさせる能力を測定する。描画処理を中心とするものの、その他の能力も問われる重いテストである。画面サイズがMedium(900 x 600)の場合の結果は、以下のようになった。

Firefox 52 Firefox 60 Chrome 66
Score 97.20 ± 6.73% 109.28 ± 4.04% 85.75 ± 19.13%
Multiply 118.75 ± 2.18% 85.78 ± 3.54% 222.35 ± 6.36%
Canvas Arcs 697.07 ± 2.56% 802.59 ± 2.72% 284.88 ± 1.78%
Leaves 141.80 ± 2.04% 183.82 ± 2.24% 283.17 ± 24.88%
Paths 2281.46 ± 2.46% 2467.31 ± 3.62% 820.63 ± 1.85%
Canvas Lines 1708.67 ± 2.36% 2037.31 ± 1.77% 4288.82 ± 1.74%
Focus 6.21 ± 4.04% 8.93 ± 3.41% 39.00 ± 5.13%
Images 13.56 ± 2.90% 16.61 ± 2.71% 25.46 ± 6.52%
Design 6.00 ± 33.33% 7.48 ± 14.33% 2.00 ± 100.00%
Suits 33.47 ± 3.31% 31.50 ± 6.11% 2.00 ± 50.00%

Firefox 60は、おおむねFirefox 52を上回る成績を収めている。グラフィックス関連の性能が、負荷のかかる状態で1割から2割程度アップしているのは間違いなさそうだ。これに対し、Chrome 66は今ひとつである。

JavaScript/DOM処理

Speedometer 2.0は、WebKitチームが提供するベンチマーク・スイートで、さまざまな手法によりDOM APIを酷使し、Webアプリの応答性をテストする。バージョン2.0では最新のJavaScriptフレームワークや言語仕様をサポートしたほか、スコアの算出方法も変更した。

GoogleのV8チームはOctaneベンチマークを引退させて、Speedometer 2.0の開発に参加しており、実環境のパフォーマンスを反映したスコアが出ると太鼓判を押している。MozillaもFirefox Quantumのリリースにあたり、Quantum Flowプロジェクトにおいてこのスコアを重視した

Firefox 52 Firefox 60 Chrome 66
Runs / Minute 24.4 ± 0.41 46.7 ± 0.87 57.6 ± 0.64

Firefox 60はFirefox 52の倍近いスコアを叩き出しており、Quantum Flowの成果が十分に認められる。それでもChrome 66には及ばないが、差を縮めていくことは可能だろう。

JetStream 1.1は、WebKitチームが提供するベンチマーク・スイートで、SunSpider 1.0.2やOctane 2.0からも一部のベンチマークを取り入れ、スループットとレイテンシを計測する。

Firefox 52 Firefox 60 Chrome 66
Score 123.48 ± 31.101 134.95 ± 11.652 127.95 ± 3.0543

Firefox 60がChrome 66を上回る最高のスコアを示した。

新たに加わったARES-6 1.0.1は、WebKitチームが提供するベンチマーク・スイートで、JavaScriptの最新機能に焦点を当てて、その処理時間を計測する。起動が高速かつ処理が滑らかであれば、良い結果が出るように設計されており、結果のばらつきの大きさもスコアに反映される。

Firefox 52 Firefox 60 Chrome 66
Overall 163.88 ± 2.35ms 93.66 ± 2.83ms 33.55 ± 0.50ms

Speedometer 2.0の場合と同様に、Firefox 60は大きな進歩を見せているのだが、いかんせんChrome 66が強い。

新たに加わったWeb Tooling Benchmark v0.4.0は、GoogleのV8チームが提供するベンチマーク・スイートで、Web開発用のツールを動作させた場合のパフォーマンスを計測する。

Firefox 52 Firefox 60 Chrome 66
Runs/Sec 2.33 3.57 6.75

ここでも、Firefox 60が5割以上の改善を示す一方、Chrome 66が強さを見せつけた。

asm.js

Emscriptenプロジェクトの一環として公開されているベンチマーク・スイートMASSIVE v1.2を走らせて、asm.jsの処理性能を見る。このベンチマークは大規模なasm.jsコードに特化しており、Poppler、SQLite、LuaとBox2Dのコードをベースに、スループットだけでなく、読み込み時間や読み込み中の応答性、パフォーマンスの一貫性なども計測対象とする。

Firefox 52 Firefox 60 Chrome 66
Score 3911 N/A 1667

Firefox 60はハング状態となったためスコアを計測できなかった。Chromeはasm.jsの処理に関しては力を入れていないようだ。

総合的なベンチマーク・スイート

Basemark Web

Basemark Web 3.0は、フィンランドのBasemark社が提供する総合ベンチマークで、最新のWeb標準と機能を用いて実環境のパフォーマンスを計測できるというのがセールスポイント。以下はConformanceがオン、Batteryがオフという初期設定で実行させた結果だ。

Firefox 52 Firefox 60 Chrome 66
Score 270.09 185.86 293.43

Firefox 52がChrome 66に迫るスコアだったのに、Firefox 60になって大幅に落ち込むという謎の結果に。MASSIVEと同じく、バグのためどこか一部の処理が足を引っ張っているのかもしれない。

RoboHornet

RoboHornet RH-A1は、Benchmark.jsベースの総合ベンチマークで、α版だが完成度は高い(FAQ)。ここでは、標準的なCore Suiteを選んで計測した。

Firefox 52 Firefox 60 Chrome 66
RoboHornet index 92.45 106.22 143.88
Add Rows to Table 5.48 8.00 9.49
Add Columns to Table 2.63 4.85 4.35
Descendant Selector 22.67 23.91 10.03
2D Canvas toDataURL 4.42 4.76 19.57
2D Canvas clearRect 5.70 5.81 11.76
innerHTML Table 2.87 5.11 2.96
Table scrolling 4.56 6.56 3.18
Resize columns 5.31 8.05 21.74
Object Scope Access 3.13 3.06 2.33
ES5 Property Accessors 11.85 6.54 6.77
Argument instantiation 1.81 10.11 10.31
Animated GIFS 0.80 1.04 0.31
offsetHeight triggers reflow 2.41 3.80 7.30
DOM Range API 4.88 4.19 5.18
Write to localStorage 8.51 5.08 13.71
Read from localStorage 5.41 5.35 14.91

ほとんどのテストでFirefox 60はスコアを伸ばし、総合的に15%程度の改善を見せている。ただ、Chrome 66との差はなお大きい。

WebXPRT

WebXPRT 3 v2.93は、米Principled Technologies社が提供するWebベンチマークである。オフィスワーカー向けWebアプリを念頭に置いたらしき6つのタスクを、繰り返し7回実行することで、精度の高い判定を行う。タスクはWebXPRT 2015から一部変更されているようだ。以下の表で、総合スコアは数値が大きいほうがよいのに対し、個別の項目は処理に要する時間(ミリ秒)を示しており、数値が小さい方がよい。

Firefox 52 Firefox 60 Chrome 66
Score 134 167 137
Photo Enhancement 481 ms 373 ms 347 ms
Organize Album using AI 2523 ms 2370 ms 2698 ms
Stock Option Pricing 341 ms 262 ms 290 ms
Encrypt Notes and OCR Scan 2059 ms 1700 ms 3279 ms
Sales Graphs 681 ms 611 ms 652 ms
Online Homework 3754 ms 2480 ms 3318 ms

Firefox 60がFirefox 52比で約25%のスコアアップを達成し、Chrome 66を抑えてトップに立った。

総合評価

一部のテストで不自然な結果が確認されたものの、Firefox 60はFirefox 52を圧倒しており、パフォーマンスが大幅に向上したことは疑う余地がない。これには、64bit化、e10s-multi(Quantum Compositor〔GPUプロセス〕を含む)の全面的導入、Quantum Flowにおける地道な改良の積み重ね、Quantum CSS(Stylo)の実装など、複合的な要因が作用しているとみられる。今回は適切なテストがなく見送ったが、WebAssemblyの処理性能まで含めていれば、さらに差がついたはずだ。

MozillaはSpeedometer 2.0のスコアを根拠として、1年間で2倍の速さになったとアピールしているが、実環境における複雑なタスクを基準にすると、15%から25%の改善といったところが適切ではないか。一見すると小さな数字に見えるかもしれないが、PC性能の伸びが鈍化する一方、Webアプリが重量化している近年の状況からすると、下手をすればPCを買い換えたくらいの違いがある。

Firefox 60とChrome 66を比較した場合も、相対的に古いベンチマークでは差がつきにくく、グラフィックス関連ではFirefoxのほうが良いパフォーマンスを示すケースもある。また、WebXPRT 3のように実環境に近いテストでも、FirefoxはChromeに勝る実力を示した。もっとも、DOM関連の処理の速さや安定性ではChromeに軍配が上がる。追いつくまでにはまだまだ時間がかかるだろう。

消費メモリに関しても、Firefoxは多プロセス化が進んでメモリを喰うようになったのに対し、ChromeはJavaScriptエンジンの改良によって効率的なメモリ利用を実現するに至っており、MozillaがアピールするほどFirefoxが省メモリというわけではなさそうだ。ただ、昔と違ってメモリを消費してもFirefoxの動作は重くなりにくい。デスクトップ環境において消費メモリを競う意義は小さくなっているのかもしれない。

次のESRは、Firefox 66がベースになると予想される。MozillaがFirefox 59ではなく60をもってESRとしたのは、Policy Engineという企業向け機能を開発するためだったが、毎年11月ころに大きな開発成果を投入するという最近の開発パターンと照らし合わせると、3月ころに新ESRを出さないと開発に支障が出かねない。ESRが出るまでは互換性に配慮して大きな変更を加えづらいが、大きな変更ほど長いテスト期間を要するためだ。おそらくFirefox 66では、開発が遅れているQuantum Renderが初期設定で有効化されているだろう。Quantum Flowのようなプロジェクトが再度行われて、その成果も投入されているはずだ。今回、FirefoxはChromeを視界に捉えるところまで来たが、次回は背中が見えていることを期待したい。

*1:Are they slim yet, round 2参照

*2:Firefoxとの単純比較は困難だが、この方法であればChromeのメモリ使用量が過大に出ることはないはず。

*3:Bug 1188834参照。javascript.options.compact_on_user_inactive_delayの値はその後も変わっていない。

Firefox 60以降でもMozilla Add-ons(AMO)上で拡張機能を動作させる裏技

Firefox 57以降、初期設定のままだと拡張機能はMozilla Add-ons(AMO)などMozillaが運用するWebサイト上で動作しない。悪意ある拡張機能にMozillaの信用性を利用されないための措置だが、拡張機能の使い勝手は当然落ちる。マウスジェスチャが使えないだけでなく、たとえば右クリック+マウスホイール回転でタブを切り替えていく場合、該当するWebサイトがあると、そこで切り替えが止まってしまうのだ。

そこで、How to enable Firefox WebExtensions on Mozilla websites - gHacks Tech Newsなどで紹介されているテクニックを利用している人もいるだろう(Bug 1384330参照)。方法をおさらいしておくと、1.アドレスバーに"about:config"と打ち込んでページを開き、「動作保証対象外になります!」という警告が出たときは、「危険性を承知の上で使用する」をクリックして先へ進む。2. privacy.resistFingerprinting.block_mozAddonManagerの設定を新規作成し、真偽値をtrueにする。

だが、Firefox 60以降、このテクニックだけでは不十分になった(Bug 1445893参照)。拡張機能の動作を制限するドメインの仕組みが新たに追加されたためだ。このドメイン一覧からAMOを取り除くという一捻りが必要となる。

about:configの画面で検索ボックスにextensions.webextensions.restrictedDomainsの設定名を入力し、表示された設定をダブルクリックしてみよう。すると「文字列を入力してください」というダイアログが表示されるので、"addons.mozilla.org,"を消去し、OKをクリックする。これで再びAMO上で拡張機能が動作するようになる。ただし、公式にサポートされた方法ではないので、将来的に通用しなくなる可能性があることに注意してほしい。

Firefox Quantumのイースター・エッグ

今さらではあるが、Firefox 57以降を対象としたイースター・エッグの存在が判明したので紹介しておきたい(Bug 1405009)。

Firefox Quantumの新UI(Photon)では、オプション画面に検索機能が付いており、検索文字列と一致する項目をピックアップしてくれるのだが、一致する項目がない場合は、その旨のメッセージとともにモノトーンの画像が表示される。

f:id:Rockridge:20180430210051p:plainf:id:Rockridge:20180430210107p:plain
左:オプション画面の検索機能 右:一致する項目がなかった場合

ところが、検索文字列に「🔥🦊」の絵文字(つまり火と狐)を入力すると、専用のカラー画像が表示されるのだ。画像に出てくるキャラクターたちはPhoton UIの各所で用いられているが、ふだんはモノトーンで描かれているものが、色鮮やかに、しかも集合写真風に並ぶとそれなりに味わいがある。

f:id:Rockridge:20180430210432p:plain
イースター・エッグの画像

Australisのときは画像が動いていたので、それと比べると今回のイースター・エッグは慎ましいが、制作者の遊び心が感じられてよい。

Firefox QuantumのOff Main Thread Painting(OMTP)とRetained Display Listsについて

Windows版Firefox 58でOMTPが有効化

Firefox 58ではWindows版に限って、以前紹介したOff Main Thread Painting(OMTP)と呼ばれる機能が有効化されている(Bug 1403935)。このOMTPに対し、画像処理に関するものだという誤解が一部にあるようなので、その誤解を解いておきたい。

まずはGeckoのグラフィックス・パイプラインのおさらいから。Geckoでは、DOMツリー → フレームツリー → ディスプレイリスト → レイヤーツリーの順に処理が流れていき、最後にcompositorがレイヤーツリーを合成する。今回取り上げるのは、「ディスプレイリスト → レイヤーツリー」の処理の部分だ。

f:id:Rockridge:20171204000145p:plain
Geckoのグラフィックス・パイプライン

Off-Main-Thread Painting – Mozilla Gfx Team Blogによれば、Geckoの描画処理は、合成(Compositing)のフェーズを別にすると3段階に分けることができる。具体的には、1)ディスプレイリストの構築、2)レイヤーの割り当て、3)ラスタライゼーションである。

1)ディスプレイリストの構築では、ページ内の視覚的要素を収集し、ディスプレイアイテムと呼ばれる高水準プリミティブを生成する。2)レイヤーの割り当てでは、ディスプレイアイテムをグループにまとめてPaintedレイヤーと呼ばれる複数のレイヤーに割り当てる。3)ラスタライゼーションでは、レイヤーに割り当てられたディスプレイアイテムが実際に描画される。

これまでは上記3段階がすべてメインスレッドにおいて処理されてきた。これに対し、OMTPは3段階目のラスタライゼーションを別スレッドで非同期に処理する。この別スレッドは、ペイントスレッドと呼ばれる。

f:id:Rockridge:20180128204314p:plain
ラスタライゼーションの非同期化

メインスレッドはラスタライゼーションの手前で解放され、次の処理に移ることができる。また、ペイントスレッドはメインスレッドと並行してラスタライゼーション処理に集中することができる。この流れ作業によって、スレッド間での処理の受け渡しが発生するものの、全体としては、互いに前の処理を待つ時間を短縮することが可能になるわけだ。

f:id:Rockridge:20180128204257p:plain
非同期化による流れ作業の実現

OMTPが力を発揮するのは、メインスレッドの処理に余裕がない場合である。たとえば、重いJavaScriptを処理しながらグラフィックスの処理も行う場面では、ラスタライゼーションをペイントスレッドが担うことで、処理落ちを防ぐことができる。そうした場面でOMTPを有効化すると、Windows版で30%程度フレームレート(FPS)が向上することが、Mozillaの開発者の調査結果から明らかになっている。

f:id:Rockridge:20180128204241p:plain
OMTPによるFPSの向上

Retained Display Listsでディスプレイリストの構築コストに対処

Firefox 59以降のNightlyチャンネルでは、Retained Display Listsと呼ばれる機能が有効化されている(Bug 1416055)。この機能は前記の1)ディスプレイリストの構築に関わるもの。Geckoの描画処理において、ディスプレイリストの構築は処理時間の40%以上という高い割合を占める。Retained Display Listsは、リストの構築コストを大幅に削減するための技法だ。

Retained Display Lists – Mozilla Gfx Team Blogによれば、これまで、スクリーンの表示内容に変更が生じたときは、ディスプレイリストを一から構築し直していた。他方、Retained Display Listsの導入後は、これを原則として維持し、表示内容が変更された部分についてだけ新しいリストを構築して、新リストを旧リストに統合する。通常、表示内容が変更されるのは画面内の一部にとどまるので、新リストは比較的小さなもので済む可能性が高い。一から構築し直す場合と比べて処理時間を短縮できるわけだ。

Mozillaの開発者がFirefox 58 Betaのユーザーを対象にA/Bテストを実施しており、Retained Display Listsを有効化すると、16ミリ秒を超える「遅い」描画処理を30%近く削減できるという結果が出ている。しかも、Firefox 59には表示内容に全く変更がなければリストを維持し続ける機能(Bug 1419021)が追加実装されたため、現在ではさらに効果が大きくなっているとみられる。

f:id:Rockridge:20180128204323p:plain
Retained Display Listsの効果

OMTPのように「重いJavaScriptを処理しながら」といった制約がない分、Retained Display Listsのメリットは大きいが、表示内容に変更が生じた分だけディスプレイリストを構築する仕組みは複雑であり、完成までに時間がかかっている。現状ではFirefox 59リリース版への投入は難しく、Firefox 60で有効化されることになりそうだ。

マウスホイールでページをスクロールする際の小技(Firefox 58以降)

Firefox 58がリリースされ、既に手動アップデートが可能な状況になっている。パフォーマンスの向上については別記事を参照していただくとして、ここではマウスホイールでページをスクロールする際の小技を2つ取り上げたい。どちらもFirefox 58で実装された機能だ。

1つ目は、スムーズスクロールの挙動を変更するというもの(Bug 1402498)。about:configのページでgeneral.smoothScroll.msdPhysics.enabledをtrueに変更すると有効化される。加速・減速のシミュレーションにcubic-bezierを用いる現行方式とは異なり、新方式ではMass-spring-damperを用いるのだという。実際にマウスホイールを回してページをスクロールさせてみると、現行方式よりも加速の度合いが大きく、より少ないホイール回転で終端に到達する。新方式を好むユーザーも少なくないのでは、と思う。

2つ目は、Shiftキーを押しながらマウスホイールを回すと横スクロールになるというもの(Bug 143038)。macOS版ではOSの挙動に合わせて最初からそうなっているようだが、Windows版などでは旧式の拡張機能を使わないと実現できなかった。旧式拡張機能の廃止に伴い、16年前に登録されたバグが修正され、デスクトップ版における方式が統一された。