当ブログでは、Firefoxの延長サポート版(ESR)のベースが更新される時期を節目とみて、ベンチマークの測定結果を公開している。ESRの新たなベースとなるFirefox 31がまもなくリリースされる見込みなので、今回はFirefox 24と比較してみたい。
使用するのは、32bit版のFirefox 24.6.0とFirefox 31.0 RC2である。後者はリリース候補版だが、そのまま正式版になるとみられる。ユーザーエージェント文字列は以下のとおり。
- Firefox 24:Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
- Firefox 31:Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0
動作環境が前回から大きく変更されているので注意してほしい。OSはWindows 8.1 Update 1(64bit版)で、使用したハードウエアは、CPUがIntel Core i7 4800MQ 2.70GHz、GPUがIntel HD Graphics 4600(ドライバのバージョン:10.18.10.3338)、メモリ容量が16.0GBである。テストの際は、新規プロファイルを(フォントをメイリオに変更する以外は)初期設定のまま利用し、アドオンをすべて無効化し、プラグインもShockwave Flash 14.0 r0以外を無効化した。各ベンチマークの実行後はFirefoxを終了させて、メモリ上に前のベンチマークが残らないように配慮している。
なお、対象となるベンチマークは、今回も一部を入れ替えた。
ページの読み込み速度およびメモリ使用量
10のWebサイトを同時に開いて、読み込み中であることを示すアイコン(throbber)が消えるまでの時間を手動で計測した(秒数の小数点以下は切上げ)。同時に、10サイトを表示させた場合と、単サイトを表示した場合のメモリ使用量もチェックした。
具体的な手順は、次のとおり。以下の10サイトをその記載順にブックマークしたバックアップファイル(JSON形式)をインポートし、「タブですべて開く」で10サイトをいっせいに読み込む。throbberが消えるまでの時間を計測し、完了したらFirefoxのホームページは閉じ、各タブをクリックしてWebページを実際に画面に表示させる。つまり最後に表示されるのはWikipedia(日本語版)になる。
- 日本マイクロソフト / Apple / 食べログ
- Amazon.co.jp / YouTube / NHKオンライン / 朝日新聞デジタル
- はてな / Yahoo! JAPAN / Wikipedia(日本語版)
1分間そのまま放置した後、新しいタブを開き、about:memoryを呼びだして"Show memory reports"のMeasureボタンをクリックし、residentの値を見る。従来はExplicit Allocationsの値を見ていたのだが、MozillaのNicholas Nethercote氏によれば、メモリ使用量を簡潔に示す単一の指標としては、residentの値が最も優れているという。本記事でもresidentの値を採用することにした。
「他のタブをすべて閉じる」でYahoo! JAPAN以外のWebページはすべて閉じる。1分間そのまま放置した後、再び新しいタブを開き、about:memoryを呼びだしてresidentの値を見る。Firefoxをいったん終了させ、再起動後に上記10サイトを同じ手順で開いて、throbberが消えるまでの時間を計測する。一連の手順を実行した結果がこれだ。
Firefox 24 | Firefox 31 | |
---|---|---|
読込時間(1回目) | 12 秒 | 12 秒 |
読込時間(2回目) | 10 秒 | 10 秒 |
Firefox 24 | Firefox 31 | |
---|---|---|
使用メモリ(10サイト) | 295.98 MB | 331.31 MB |
使用メモリ(単サイト) | 219.39 MB | 250.09 MB |
読み込み速度には全く差が見られなかった。ある程度高速なPC環境では、性能が頭打ちになっているのかもしれない。なお、新しいHTTPキャッシュシステム(cache v2)がデフォルトでオンになるのはFirefox 32からなので、今回はテストしていない。
一方、メモリ使用量はFirefox 31のほうが多いという結果になった。起動時に作成されるシステムコンパートメントが増加したという話も出ており、最低限使用するメモリの差が出たか。また、不要になったメモリの解放についても、世代別ガベージコレクション(Generational GC)が、動作を不安定にするとの理由で、Firefox 31 Betaの段階でオフにされており、こちらで挽回することもできなかった。
動的ページの処理
GUIMark 2のText Column Testを使用して、秒間フレーム数(FPS)を調べた。なお、GUIMark 3のHTML5 Vectorは他のベンチマークと重複するので外すことにした。
Firefox 24 | Firefox 31 | |
---|---|---|
Text Column Test | 25.5 fps | 56.52 fps |
Firefox 31の圧勝だが、これはFirefox 24にバグ(Bug 921858)があったことが原因である。つまりFirefox 31で高速化したのではなく、(ほぼ)元の水準に戻ったわけだ。
レイアウトおよび描画処理
CanvasMark 2013
CanvasMark 2013 version 1.1は、HTML5ゲームでよく使用される処理(ビットマップ、Canvas描画、αブレンディングなど)に対するレンダリングパフォーマンスをテストする。なお、Canvas Performance Benchmarkは若干古くなったので外すことにした。
Firefox 24 | Firefox 31 | |
---|---|---|
CanvasMark Score | 10335 | 10228 |
わずかながらFirefox 31のスコアが低下している。
CSSレイアウト処理
Internet Explorer 11 Test DriveからMaze Solverをピックアップし、迷路のサイズを30×30に設定してテストを実行した。このテストは、WebブラウザがCSS 2.1およびCSS 3ベースのレイアウト構築を処理する性能に焦点を当てており、数値が小さいほど高速である。
Firefox 24 | Firefox 31 | |
---|---|---|
Browser Score | 8.8 秒 | 9.7 秒 |
どちらも高速に処理されているが、やはりわずかにFirefox 31の成績が悪い。
FishGL
Internet Explorer 11 Test DriveからFishGLをピックアップし、水槽内の魚の数を150匹に設定してテストを実行した。 このテストは、WebGLに関する処理性能を測定するものだ。
Firefox 24 | Firefox 31 | |
---|---|---|
秒間フレーム数 | 40 - 43 fps | 44 - 45 fps |
Firefox 31のほうが若干FPSは高いものの、テスト中、PCのファンの音がより大きくなる印象を受けた。ちなみに、魚の数を200匹にしなかったのは、FPSが突然低下する現象が起きたためである。グラフィックスドライバとの相性問題かもしれないが、動作の安定性が気になる。
JavaScript/DOM処理
代表的なベンチマークを利用して、JavaScript/DOMを中心とした処理能力を測る。今回は、若干古くなったKraken JavaScript BenchmarkとDromaeoをを外すことにした。なお、JetStream 1.0は、Firefox 31でエラーが生じるため採用を見送った。
Octane
Octane JavaScript Benchmark は、V8 Benchmark Suiteの後継となるベンチマークで、モダンなWebアプリケーションを実行した場合の性能を反映した結果になるという(FAQ)。v1では実行スループットに焦点を当てていたが、v2では低レイテンシも同様に重要であるとの観点からベンチマークの内容の見直しが図られた。
Firefox 24 | Firefox 31 | |
---|---|---|
Octane Score | 23094 | 24943 |
Richards | 29343 | 29445 |
Deltablue | 28358 | 23055 |
Crypto | 24804 | 26020 |
Raytrace | 37510 | 27500 |
EarleyBoyer | 31153 | 32348 |
Regexp | 1961 | 2476 |
Splay | 17304 | 19256 |
SplayLatency | 10731 | 12737 |
NavierStokes | 27695 | 30095 |
pdf.js | 16679 | 19584 |
Mandreel | 26877 | 30869 |
MandreelLatency | 42609 | 46159 |
GB Emulator | 50799 | 49699 |
CodeLoad | 21174 | 19714 |
Box2DWeb | 29278 | 40203 |
zlib | 58393 | 59415 |
Typescript | 17689 | 29847 |
Firefox 31が8%程度スコアを伸ばした。Box2DWebやTypescriptなど、一部の項目で大幅に改善がみられた点が影響している。低レイテンシという観点でも、Firefox 31に分があるようだ(SplayLatencyとMandreelLatencyの項目参照)。
Speedometer
Speedometer 1.0は、WebKitチームが開発した新しいベンチマークで、DOMオブジェクトの操作に焦点を当て、Webアプリの応答性を測定する。jQueryなど6つのポピュラーなJavaScriptフレームワークを採用し、ユーザーの行動をシミュレートするという。
Firefox 24 | Firefox 31 | |
---|---|---|
Runs / Minute | 66.51 ± 0.50 | 69.44 ± 0.48 |
4%強とそれほど差は大きくないものの、Firefox 31のほうが高いスコアとなった。
asm.js
Firefoxは、OdinMonkeyと呼ばれるAOT(Ahead Of Time)コンパイラを搭載している。OdinMonkeyは、asm.jsをバイトコード生成前の抽象構文木(AST)から一挙にIonMonkey向け中間表現(MIR)へと変換し、このMIRはコンパイル後、Baselineに差し戻されることがないため、全体として処理が高速化される。そして、asm.jsは主にEmscriptenによってネイティブコードから生成される。
そこで、Emscriptenプロジェクトの一環として公開されているベンチマーク・スイートEmbenchen v0.0.2を利用して、asm.jsの処理性能を見てみよう(参考記事)。このベンチマーク・スイートは、マイクロベンチマークとマクロベンチマークから構成されるが、性能の指標としては実環境に近い後者が重要となるので、本記事でもマクロベンチマークの結果を掲載する。なお、数値が小さいほど高速である。
Firefox 24 | Firefox 31 | |
---|---|---|
box2d | 8742 ミリ秒 | 8807 ミリ秒 |
bullet | 9741 ミリ秒 | 9542 ミリ秒 |
lua_binarytrees | 5779 ミリ秒 | 5436 ミリ秒 |
zlib | 9264 ミリ秒 | 8750 ミリ秒 |
おおむねFirefox 31のほうが好成績であり、asm.jsの処理性能が向上しているのが見てとれる。
HTML5/JavaScript処理
以下は、総合的なベンチマーク・スイートを走らせた結果である。
Canvas Cycle
Canvas Cycleは、HTML5 Canvas上に8bitのカラーパレットを用いたアニメーションを表示し、サウンドも鳴らすデモだ(解説)。オプションを表示させると秒間フレーム数(FPS)が出るので、"Jungle Waterfall - Morning"を初期設定のまま走らせてみた。
Firefox 24 | Firefox 31 | |
---|---|---|
秒間フレーム数 | 102 - 107 fps | 93 - 99 fps |
Firefox 31のFPSが若干低下している。他のテスト結果と照らし合わせると、描画関係に何らかの問題を抱えている可能性も考えられる。
enchant.js
4Gamer.net「『enchant.js』でゲームはどれくらい動くのか? HTML5でゲームベンチマークを取ってみよう」掲載のベンチマークを利用し、100秒間のフレームレートの合計値を測定した。
Firefox 24 | Firefox 31 | |
---|---|---|
Score | 12546 | 11266 |
やはりFirefox 31でパフォーマンスの低下が見られる。
Impact HTML5 Benchmark
Impact HTML5 Benchmarkは、Mozillaの開発者が作成した2Dアクションゲーム風のベンチマークで、解説によれば、スコアを算出する際、処理の中断があると大きなペナルティがつくようになっている。つまり、レンダリングに加えてガベージコレクションの能力も問われるわけだ。
Firefox 24 | Firefox 31 | |
---|---|---|
Score | 10370 | 10873 |
Total CPU Time | 8.30 秒 | 7.56 秒 |
Total Lag | 53 ミリ秒 | 50 ミリ秒 |
Firefox 31のスコアがFirefox 24を上回った。Total Lagの数値からすると、インクリメンタルGCも改良されているようだ。
Peacekeeper
Peacekeeperは、Futuremarkが提供する重量級のベンチマーク。多角的かつそこそこ信頼性の高いものを探すとなると、今なおこのベンチマークは外せない。
Firefox 24 | Firefox 31 | |
---|---|---|
Points | 3243 | 3896 |
意外なほどFirefox 31がリードしている。項目別に見ると、RenderingやHTML5 Canvasでは多少上回る程度だが、DOM operationsとText parsingで大差を付けており、それが総合ポイントに反映されている。
Browsermark
Browsermark 2.1は、Rightwareが提供する総合ベンチマークで、実環境のパフォーマンスを計測することに焦点を当てているという。計測の対象は、CSS、DOM、グラフィックス、JavaScriptなど。なお、2.1のスコアは2.0のものと互換性がない。
Firefox 24 | Firefox 31 | |
---|---|---|
Score | 4165 | 4685 |
Peacekeeperと同様に、Firefox 31の伸びが大きい(約12.5%)。どうやらFirefox 31は、個別のパーツの性能ではなく、総合的な性能で勝負するタイプらしい。
RoboHornet
RoboHornet RH-A1は、Benchmark.jsベースの総合ベンチマークで、α版だが完成度は高い(FAQ)。今回は、標準的なCore Suiteを選んで計測した。
Firefox 24 | Firefox 31 | |
---|---|---|
RoboHornet index | 134.01 | 116.01 |
Add Rows to Table | 8.53 | 9.08 |
Add Columns to Table | 5.02 | 4.85 |
Descendant Selector | 36.72 | 37.34 |
2D Canvas toDataURL | 5.00 | 5.12 |
2D Canvas clearRect | 3.88 | 3.89 |
innerHTML Table | 4.99 | 6.45 |
Table scrolling | 5.79 | 8.70 |
Resize columns | 9.36 | 9.64 |
Object Scope Access | 3.69 | 3.54 |
ES5 Property Accessors | 2.29 | 2.32 |
Argument instantiation | 4.69 | 4.09 |
Animated GIFS | 1.79 | 0.53 |
offsetHeight triggers reflow | 1.62 | 1.49 |
DOM Range API | 5.55 | 5.74 |
Write to localStorage | 20.43 | 7.92 |
Read from localStorage | 14.69 | 5.31 |
総合成績だけだとFirefox 31がずいぶん悪いように見えるが、個別の項目では改善されている箇所も多い。ただ、Firefox 24で異様に高い数値を叩き出していたlocalStorage関係の項目が振るわなくなったため、全体の足を引っ張っている。
総合評価
テストによって結果にばらつきがあるため、どれだけ性能が向上したかを評価するのは難しい。Australisというユーザーインターフェイスの全面的な刷新を挟む中で、進歩を維持しているのは立派ともいえるが、やや物足りない感は否めない。
おぼろげながら浮かび上がってきたのは、Mozillaが、Webページの処理性能ではなく、Webアプリの処理性能を重視した改良を加えてきているという点だ。もちろん、両者はかなりの部分重複するわけだが、Webアプリを利用したときにユーザーが快適だと思うかどうかは、動作の安定性など他の要素にも強く影響されると思われる。バランスの難しい領域に入りつつあるようだ。
次のFirefox ESRはバージョン38がベースとなる。31に間に合わなかったいくつかの機能が追加されることは確実だが、アーキテクチャの革新にも期待したいところだ。