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の値を見る。
- 日本マイクロソフト / アップル / 食べログ
- Amazon.co.jp / YouTube / NHKオンライン / 朝日新聞デジタル
- はてな / Yahoo! JAPAN / Wikipedia(日本語版)
「他のタブをすべて閉じる」で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 2のText Column TestとGUIMark 3のHTML5 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 TestとText Column Testの結果である。
Firefox 4 | Firefox 10 | |
---|---|---|
Vector Charting Test | 21.97 fps | 22.32 fps |
Text Column Test | 49.28 fps | 53.6 fps |
SunSpider
各テストを50回連続で行うGoogle修正版のSunSpider JavaScript Benchmark 0.9.1の結果である。
Firefox 4 | Firefox 10 | |
---|---|---|
Total | 196.0 ms +/- 1.8% | 156.1 ms +/- 2.5% |
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% |