Mozilla Flux

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

三世代のFirefox ESRを比較する

Firefox 24のリリースとともに、延長サポート版(ESR)も更新された。ESR自体は法人向けという位置付けだが、Mozillaの開発者が安定性に影響しないよう新機能の投入をESRの公開後に設定するなど、その公開が開発の節目として捉えられている面もある。パフォーマンスを測定・比較するにもいいタイミングだろう。

前回ベンチマークの結果を記事にしたのは、Firefox 10のとき。そこで、今回は32bit版のFirefox 10.0.12、Firefox 17.0.9そしてFirefox 24.0のESR三世代を比較の対象とした。ユーザーエージェント文字列は以下のとおり。

  • Firefox 10:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.12) Gecko/20100101 Firefox/10.0.12
  • Firefox 17:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
  • Firefox 24:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0

動作環境はWindows 7 SP1(64bit版)で、新規プロファイルを(フォントをメイリオに変更する以外は)初期設定のまま利用し、アドオンをすべて無効化し、プラグインもShockwave Flash 11.8(r800)以外は無効化した。使用したハードウエアは、CPUがIntel Core i5-2410M 2.30GHz、GPUがIntel HD Graphics 3000(ドライバのバージョン:9.17.10.3190)、メモリ容量が8.00GBである。

なお、対象となるベンチマークは、前回から1年半以上が経過したこともあり大幅に見直した。各ベンチマークを実行後はFirefoxを終了させて、メモリ上に前のベンチマークが残らないように配慮している。

ページの読み込み速度とメモリ使用量

Firefoxの処理が高速化されるにともなって、単一のWebページを読み込ませる手法でパフォーマンスを測るのは難しくなってきた。今回は、10のWebサイトを同時に開いて、読み込み中であることを示すアイコン(throbber)が消えるまでの時間を手動で計測している。誤差が避けられないので、秒数の小数点以下は切上げとした。同時に、10サイトを表示させた場合と、単サイトを表示した場合のメモリ使用量もチェックした。

具体的な手順は、次のとおり。以下の10サイトをその記載順にあらかじめブックマークしたファイルをインポートし、「タブですべて開く」で10サイトをいっせいに読み込む。throbberが消えるまでの時間を計測し、完了したらFirefoxのホームページは閉じ、各タブをクリックしてWebページを実際に画面に表示させる。つまり最後に表示されるのはWikipedia(日本語版)になる。1分間そのまま放置した後、新しいタブを開き、about:memoryを呼びだしてExplicit Allocationsの値を見る。

「他のタブをすべて閉じる」でYahoo! JAPAN以外のWebページはすべて閉じる。1分間そのまま放置した後、再び新しいタブを開き、about:memoryを呼びだしてExplicit Allocationsの値を見る(Firefox 24では"Show memory reports"のMeasureボタンをクリックする)。Firefoxをいったん終了させ、再起動後に上記10サイトを同じ手順で開いて、throbberが消えるまでの時間を計測する。一連の手順を実行した結果がこれだ。

Firefox 10 Firefox 17 Firefox 24
読込時間(1回目) 22 秒 13 秒 13 秒
読込時間(2回目) 19 秒 12 秒 12 秒

Firefox 10 Firefox 17 Firefox 24
使用メモリ(10サイト) 132.54 MB 154.80 MB 148.77 MB
使用メモリ(単サイト) 75.29 MB 64.31 MB 57.92 MB

読み込み速度はFirefox 17で大きく改善されたが、Firefox 24では差が見られなかった。メモリ使用量は、10サイト表示時にFirefox 10が最小となったものの、Firefox 24はFirefox 17よりも改善されている。これに対し、単サイト表示時にはFirefox 24のメモリ使用量が最小である。不要になったメモリを解放する仕組み(インクリメンタルGC)が上手く機能しているのだろう。

動的ページの処理

GUIMark 2Text Column TestGUIMark 3HTML5 Vectorを使用して、秒間フレーム数(FPS)を調べた。

Firefox 10 Firefox 17 Firefox 24
Text Column Test 54.31 fps 52.87 fps 18.38 fps
HTML5 Vector 42.56 fps 51.27 fps 52.07 fps

Text Column Testでは、Firefox 10が最も良い結果となった。実際の動作を見ても、Firefox 17は少し重く、Firefox 24は劇的に重い。

これに対し、HTML5 Vectorでは、Firefox 24が僅差でFirefox 17を上回る結果となった。ただし、実際の動作を見ると、Firefox 24はFPSが一時的に大きく低下することがあり、動作がスムーズなのはFirefox 17のほうだった。

(13/10/01追記)
Firefox 24でText Column Testの結果が悪化したことについて、Bug 921858(Status: NEW)が登録されている旨をコメント欄で教えていただいた。

Canvasの描画処理

Canvas Performance Benchmark

風と宇宙とプログラム「Canvasのベンチマークテストを作って速度を比較してみた」掲載のCanvas Performance Benchmarkを用いて、Canvasの描画処理に関する性能を測定した。

Firefox 10 Firefox 17 Firefox 24
Total Score 3.15 3.15 3.10

Firefox 24だけが若干パフォーマンスダウンという結果になった。Firefox 17と個別の項目を比較すると、改善した部分も多いが、fill_starやimage関連(image、image_scaleとimage_rotate)、linear_gradientの値が低下している。これらの項目が足を引っ張った模様。

CanvasMark 2013

CanvasMark 2013 version 1.1は、HTML5ゲームでよく使用される処理に対するレンダリングパフォーマンスをテストする、新しいベンチマークだ。

Firefox 10 Firefox 17 Firefox 24
CanvasMark Score 4900 4647 4900

こちらはFirefox 24がFirefox 10と互角という結果になった。理由は不明だが、少なくともCanvasの描画処理を単体で見た場合、性能は上がっていないらしい。

JavaScript/DOM処理

代表的なベンチマークを利用して、JavaScript/DOMを中心とした処理能力を測る。なお、有名なSunspiderもバージョン1.0.1へとアップデートされているが、差が出にくいので採用していない。

Octane

Octane JavaScript Benchmark v1は、V8 Benchmark Suiteの後継となるベンチマークで、GoogleいわくモダンなWebアプリケーションを実行した場合の性能を反映した結果となるという(FAQ)。

Firefox 10 Firefox 17 Firefox 24
Octane Score 7533 8439 14888
Richards 8723 10114 19377
Deltablue 10374 10784 17488
Crypto 14055 14202 15728
Raytrace 3545 5192 24420
EarleyBoyer 8313 11316 19852
Regexp 1335 1397 2562
Splay 9681 11686 13259
NavierStokes 14395 14133 20841
pdf.js 7759 5748 9049
Mandreel 7029 8448 16993
GB Emulator 7614 11300 31274
CodeLoad 9265 10514 13955
Box2DWeb 9377 9091 14373

見てのとおりFirefox 24の圧勝である。個別の項目でも、過去のバージョンを下回ったものは一つもない。Raytraceに至っては桁違いだ。

原因は、Firefox 17のリリース後にJavaScript JITコンパイラが刷新されたことにある。新しいJITコンパイラとは、Firefox 18で導入されたIonMonkeyと、Firefox 23で導入されたBaselineである。前者は、JavaScriptを全面的に中間コードに変換し、最適化を施してからマシンコードに変換する。後者は、インラインキャッシュ(IC)チェーンを用いてIonMonkeyに正確かつ豊富な型情報を提供する。この組み合わせにより、従来のJaegerMonkey+TI(Type Inference:型推論)を大きく超えた性能を叩き出すことに成功した。

Kraken

Kraken JavaScript Benchmark version 1.1は、Mozillaが提供するベンチマーク。こちらもWebアプリケーションを実行した場合の性能を反映した結果となることを目標としているが、Octaneよりも設計が古く、そろそろ更新の時期ではないだろうか。なお、数値が小さいほど高速である。

Firefox 10 Firefox 17 Firefox 24
Total 3153.1 ms +/- 1.6% 3081.5 ms +/- 2.4% 2146.7 ms +/- 4.3%
ai 101.2 ms +/- 1.4% 103.4 ms +/- 5.1% 112.6 ms +/- 5.2%
audio 1107.8 ms +/- 3.1% 1129.5 ms +/- 4.3% 729.3 ms +/- 6.9%
imaging 1147.1 ms +/- 0.4% 1111.7 ms +/- 1.8% 446.9 ms +/- 4.6%
json 201.7 ms +/- 2.7% 149.8 ms +/- 9.0% 123.8 ms +/- 4.9%
stanford 595.3 ms +/- 2.7% 587.1 ms +/- 4.4% 734.1 ms +/- 5.0%

これもFirefox 24が抜きんでている。個別に見ていくと従来より数値が悪くなった項目もあるが、audioとimagingが大きく改善された。

Dromaeo

Dromaeoは、Mozillaが提供する重量級ベンチマークだ。やや設計が古いものの、DOM関連のテストとしてはまだまだ役に立つ。今回は、DOM Core Tests & JavaScript Library Testsに絞って調査した。詳細は比較表を参照してほしい。

Firefox 10 Firefox 17 Firefox 24
Total 384.59 runs/s ±3.44% 442.14 runs/s ±4.19% 469.61 runs/s ±3.45%

順当にFirefox 24がトップに立った。着実に改善が進んでいるようだが、Firefox 17の時点で既に数値が伸びていたのは興味深い。

CSSレイアウト処理

Internet Explorer 11 Test DriveからMaze Solverをピックアップし、迷路のサイズを30×30に設定してテストを実行した。Microsoftの説明によれば、このテストは、WebブラウザがCSS 2.1およびCSS 3ベースのレイアウト構築を処理する性能に焦点を当てているそうだ。なお、数値が小さいほど高速である。

Firefox 10 Firefox 17 Firefox 24
Browser Score 103 秒 100 秒 14 秒

Firefox 24が優秀な成績を収めた。Firefox 18で導入されたDLBI(Display-List-Based-Invalidation)のおかげだ。このGeckoの新機能は、リフローの速度を向上させるとともに、再描画領域を合理的に限定することで描画量を大きく減少させる。IonMonkeyと違ってほとんど知られていないが、上記のように場面によってはかなりの威力を発揮する。

HTML5/JavaScript処理

Canvas Cycle

Canvas Cycleは、HTML5 Canvas上に8bitのカラーパレットを用いたアニメーションを表示し、サウンドも鳴らすデモである(解説)。オプションを表示させると秒間フレーム数(FPS)が出るので、"Jungle Waterfall - Morning"を初期設定のまま走らせてみた。

Firefox 10 Firefox 17 Firefox 24
秒間フレーム数 12 - 13 fps 25 - 27 fps 59 - 60 fps

ここでもFirefox 24の性能は圧倒的だ。Firefox 17と比較しても倍以上の数値であり、素晴らしい。

enchant.js

4Gamer.net「『enchant.js』でゲームはどれくらい動くのか? HTML5でゲームベンチマークを取ってみよう」掲載のベンチマークを利用し、100秒間のフレームレートの合計値を測定した。シューティングゲームのスタイルで、効果音もつくのが特徴だ。

Firefox 10 Firefox 17 Firefox 24
Score 7928 6451 6386

昔から試しているベンチマークとはなぜか相性が悪く、Firefox 24が最下位に。Firefox 17の時点で大きく落ち込んでおり、そこからも若干パフォーマンスが低下している。

Impact HTML5 Benchmark

Impact HTML5 Benchmarkは、Mozillaの開発者が作成した2Dアクションゲーム風のベンチマークで、解説によれば、スコアを算出する際、処理の中断があると大きなペナルティがつくようになっている。つまり、レンダリングに加えてガベージコレクションの能力も問われるわけだ。

Firefox 10 Firefox 17 Firefox 24
Score 3212 8301 8181
Total CPU Time 83.91 秒 12.84 秒 13.62 秒
Total Lag 217 ミリ秒 72 ミリ秒 55 ミリ秒

Firefox 17が最高のスコアを出し、Firefox 24は少し及ばなかった。Total Lagの数値からすると、ガベージコレクションの処理能力ではFirefox 24のほうが上回っているはずで、レンダリング部分で差がついたのは意外な結果といえる。

RoboHornet

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

Firefox 10 Firefox 17 Firefox 24
RoboHornet index 71.91 74.79 108.57
Add Rows to Table 5.81 5.91 6.56
Add Columns to Table 2.42 2.91 3.16
Descendant Selector 7.45 11.48 29.79
2D Canvas toDataURL 3.95 3.97 3.42
2D Canvas clearRect 7.18 6.44 3.91
innerHTML Table 2.55 3.73 3.58
Table scrolling 4.21 3.94 3.32
Resize columns 7.21 6.95 7.44
Object Scope Access 2.16 2.38 2.37
ES5 Property Accessors 2.65 3.69 1.40
Argument instantiation 4.64 3.80 3.76
Animated GIFS 0.65 1.58 1.65
offsetHeight triggers reflow 1.09 1.03 1.21
DOM Range API 3.98 3.77 3.92
Write to localStorage 8.68 6.98 18.96
Read from localStorage 7.28 6.24 14.12

総合成績はFirefox 24の一人勝ちの様相を呈しているが、個別の項目を見ると、Descendant Selector、Write to localStorage、Read from localStorageの3つでスコアを稼いでいることがわかる。それ以外の項目では、順調に数字を伸ばしたもの、逆に目立って悪くなったものなどさまざまだ。

Browsermark

Browsermark 2.0は、Rightwareが提供する総合ベンチマークで、実環境のパフォーマンスを計測することにフォーカスしているという。計測の対象は、CSS、DOM、ページ読み込み、グラフィックス、JavaScriptなど。ただし、ページ読み込みのテストなどで動作が不安定な印象を受けた。

Firefox 10 Firefox 17 Firefox 24
Score 4063 3496 4766

Firefox 24が良いスコアを出した。Firefox 17の数字が悪い理由はよくわからないが、Firefox 10と比べてもFirefox 24は2割近くスコアが高いので、性能向上の表れとみて差し支えないだろう。

Peacekeeper

Peacekeeperは、Futuremarkが提供する重量級のベンチマークだ。WebGLも含めた多角的かつそこそこ信頼性の高いものを探すとなると、今なおこのベンチマークは外せない。

Firefox 10 Firefox 17 Firefox 24
Points 1955 1949 2043

やはり総合ポイントはFirefox 24がリードしている。詳細は割愛するが、個別の項目では、RenderingとHTML5 Canvasで数値が低下した分をText parsingやDataで補った形になっている。

総合評価

終わってみれば、ある意味で当然というべきか、IonMonkey+BaselineとDLBIが威力を発揮するベンチマークではFirefox 24が力量を見せつける結果となった。また、比較的新しいベンチマークでもFirefox 24は強い。消費メモリを見ても、タブを多く開いた場合はFirefox 10よりも少し増えるようだが、不要なタブを閉じてしまえば迅速にメモリが解放される。

気になるのは古めのベンチマークで顕著にパフォーマンスが落ちる場面が見られる点だが、バランスを保ちながら改良を加えていくのはそれだけ難しいということなのだろう。

極端な指標を除けば、Firefox 24はFirefox 10との比較で20〜50%の性能アップといったところか。実際には、ここにProject Snappyとその後継のProject Async & Responsiveの成果が加わる。つまり、起動・終了やタブの開閉などが高速化している。今回は取り上げなかったが、OdinMonkeyのような新技術もある。

次のFirefox ESRが出るのはバージョン31のとき。どんな進化を見せてくれるか楽しみだ。

Appendix

以下は付録である。2012年3月当時に計測した未公開のベンチマーク結果を、簡潔な形で掲載する。対象は、Firefox 4.0.1とFirefox 10.0.2。ちなみに、Firefox 4のリリース日が2011年3月22日、Firefox 10.0のリリース日が2012年01月31日だ。使用したハードウェアは本文と同じだが、ドライバのバージョンなどは違う。Firefox 4はハードウェアアクセラレーション機能がオンになっている。

Firefox 10はFirefox 4との比較で約20%のパフォーマンスアップを果たした上、メモリ使用量を約40%も削減した。Firefox 4のリリース当時は高速リリースサイクルが採用されていなかったため、開発期間が10か月というわけではないものの、先行していたChromeなどに追いつくべく、急ピッチで開発が進められていたことがうかがえる。

メモリ使用量

計測の手順は本文と同様である。ただし、Firefox 4はabout:memoryの機能が未整備であるため、"Memory in use"の値を用いている。

Firefox 4 Firefox 10
10サイト表示 169.10 MB 108.14 MB
単サイト表示 90.68 MB 46.53 MB

動的ページの処理

GUIMark 2のVector Charting TestText Column Testの結果である。

Firefox 4 Firefox 10
Vector Charting Test 21.97 fps 22.32 fps
Text Column Test 49.28 fps 53.6 fps

Canvasの描画処理

本文と同様、Canvas Performance Benchmarkの結果である。

Firefox 4 Firefox 10
Total Score 2.19 3.04

SunSpider

各テストを50回連続で行うGoogle修正版のSunSpider JavaScript Benchmark 0.9.1の結果である。

Firefox 4 Firefox 10
Total 196.0 ms +/- 1.8% 156.1 ms +/- 2.5%

V8 Benchmark

V8 Benchmark Suite version 7の結果である。

Firefox 4 Firefox 10
Score 4997 7575

Kraken

Kraken JavaScript Benchmarkの結果である。

Firefox 4 Firefox 10
Total 4541.9 ms +/- 0.5% 3075.8 ms +/- 0.7%

Dromaeo

DromaeoのRecommended Testsの結果である(比較表)。

Firefox 4 Firefox 10
Total 453.63 runs/s ±1.96% 528.81 runs/s ±1.87%

enchant.js

本文と同じベンチマークを利用し、100秒間のフレームレートの合計値を測定した結果である。

Firefox 4 Firefox 10
Score 6006 7024

Peacekeeper

Peacekeeperの結果である。

Firefox 4 Firefox 10
Points 1528 1993