Mozilla Flux

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

Firefox 3.6 Betaのスピードを検証してみる

久しぶりにいろいろベンチマークを走らせてみた。Firefox 3.6 Beta(revision 1)のパフォーマンスを調べるためだ。比較対象は、最近リリースされたばかりのFirefox 3.5.4。テーマがぼやけるので、今回は他のWebブラウザを入れずに、両者の比較にとどめておく。

Firefox 3.6 Betaのユーザーエージェント文字列は、次のとおり。

Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.2b1) Gecko/20091029 Firefox/3.6b1 ID:20091029171059

Firefox 3.5.4についても同様に。

Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4 ID:20091016092926

検証作業は、おおむね従来のテストを踏襲したものになっており、Windows Vista SP2(32bit版)上でブラウザを動作させている点も変わりはない。が、筆者のPC環境が新しくなっているため、従来の結果との連続性は失われている。今回のデータが以後の基礎となるだろう。

ロード時間

ブラウザの読み込み速度を、WebWaitで計測したものである。以下の各表で「初回」とあるのは、ディスクキャッシュをクリアした状態で、ブラウザの起動直後に1回だけ指定ページを読み込ませた場合の数値を指す。「平均」は、2〜6回目の読み込み時間(ロードの間隔は5秒)を平均した数値だ。

1つ目の表は、はてなのフロントページを読み込ませたケースで、2つ目の表は、Yahoo!ニュースを読み込ませたケースとなっている。

Firefox 3.6 Beta Firefox 3.5.4
初回 2.37秒 3.88秒
平均 0.57秒 0.44秒

Firefox 3.6 Beta Firefox 3.5.4
初回 1.56秒 1.85秒
平均 1.24秒 1.27秒

3.6 Betaは、3.5.4よりも初回読み込みの速度で勝っている。新たに画像ファイルについても投機的解釈の対象になったことが、よい影響を与えているのかもしれない。これに対し再読み込みのケースでは、ほとんど差がなく、場合によっては3.5.4の方が速いかもしれないという結果が出た。しかし、計測誤差の範囲内にも見えるし、体感を基準にすれば、初回読み込みが速い3.6 Betaの方がスピーディーに感じられるだろう。

レンダリング時間

Test rendering time』では、巨大なテーブルを処理させ、ブラウザのレンダリング性能を試すことができる。以下の表の「初回」および「平均」の意味は、ロード時間のテストと同じである。ただし、平均を出す際、読み込み間隔はとくに設定していない。

Firefox 3.6 Beta Firefox 3.5.4
初回 3.9120秒 4.1800秒
平均 3.2014秒 3.9887秒

通信状況の影響を受けにくい、「平均」の値が勝負所だが、明確な差がついた。処理能力が約25%向上した計算になる。Firefox 3.5の開発中も、3.6のベースとなるGecko 1.9.2は並行して改良が続けられていたが、その成果が現れているようだ。

CSSレンダリング

新テストである。『CSS Rendering Benchmark』では、CSSによって位置指定された2500個のdiv要素(span要素を含む)をベースに、DOM処理のパフォーマンスを計測し、標準的なonLoadタイマーもチェックするという。

Firefox 3.6 Beta Firefox 3.5.4
First Access 76ms 65ms
DOM Load 78ms 78ms
onLoad 287ms 326ms

さほど違いはみられないが、onLoadの数値が3.6 Betaで改善されている。

ダイナミックコンテンツ

HTML - DHTML Test』は、リアルタイムでコンテンツを変化させ、その描画性能を計測するものだ。ブラウザが搭載しているエンジンの各パートがうまく連携しないと、高いフレームレート(fps)を出すことは難しいだろう。

Firefox 3.6 Beta Firefox 3.5.4
フレームレート 14.84 - 16.48fps 14.86 - 16.33fps

両者の差は誤差と評価して差し支えない。動的コンテンツの処理性能は現状維持というわけだ。

スクロール

スタイルシートで背景画像を固定したWebページにおけるスクロール性能と、スクロール時のCPU負荷を、テストケースを用いて計測したものである。ここでいうCPU負荷とは、タスクマネージャに示されたCPU使用率の最高値を指す。なお、条件を均等にするためウィンドウはすべて最大化してある。

Firefox 3.6 Beta Firefox 3.5.4
1回目 9152ms 6098ms
2回目 9185ms 6108ms
3回目 9112ms 6118ms
CPU負荷 44% 71%

首をかしげる結果となった。CPU負荷が大幅に低下したものの、スクロール性能も大幅に下がってしまっている。これがバグなのか仕様なのかは、現時点で判別できない。revision 2あるいはRCでどのように変化するのか注目しておきたい。

(09/11/03追記)
中野雅之さんのコメント欄でのご指摘によると、Firefox 3.6のスクロール性能は3.5から低下しておらず、上記の結果は、タイマーの精度の差によるものと考えられるとのこと。

JavaScriptベンチマーク

ここからは、JavaScriptエンジンの性能をチェックしていく。利用したベンチマークは、SunSpider、V8、Dromaeoという代表的な三つ。Firefoxの設定は、断らない限りデフォルトのままであり、3.6 Betaだとjit.content・jit.chromeがともにtrue、3.5.4の方はjit.contentがtrue、jit.chromeがfalseとなっている。

SunSpider

最初に、SunSpider JavaScript Benchmarkの成績を比較してみる。

Firefox 3.6 Beta Firefox 3.5.4
Total 1311.4ms +/- 2.9% 1516.0ms +/- 4.1%
3d 205.8ms +/- 16.2% 248.8ms +/- 5.5%
access 198.4ms +/- 10.4% 214.0ms +/- 1.5%
bitops 58.4ms +/- 1.9% 55.2ms +/- 1.9%
controlflow 59.4ms +/- 3.2% 58.0ms +/- 2.1%
crypto 68.8ms +/- 12.3% 85.0ms +/- 13.4%
date 213.6ms +/- 9.7% 243.6ms +/- 12.0%
math 71.2ms +/- 12.2% 73.0ms +/- 11.6%
regexp 72.0ms +/- 1.2% 87.4ms +/- 4.2%
string 363.8ms +/- 3.7% 451.0ms +/- 9.6%

3.6 Betaは、3.5.4と比べて全般的に数値が改善された。15%ほどスピードアップした計算になり、着実な伸びを見せている。ただ、『強化されたPGOの効果は?』の追記などで述べたとおり、Firefox 3.6は、PGOのプロファイルが3.5に比べて強化されており、この点に注意が必要だ。つまり、最適化の効果によって下駄を履いている可能性がある。

jit.content・jit.chromeをともにfalseにし、TraceMonkeyに頼らないケースではどうだろうか。これまで、Firefox 3.1b3preをピークに、パフォーマンスが緩やかに落ちていく傾向にあったが、今回調べたところでは、10%弱の性能アップと出た。TraceMonkeyにうまく乗らない処理もあるため、この結果は案外重要だ。

Firefox 3.6 Beta Firefox 3.5.4
Total 2899.4ms +/- 6.7% 3148.0ms +/- 3.2%

V8 Benchmark

次に、V8 Benchmark Suite(version 5)のスコアはどうだろうか。

Firefox 3.6 Beta Firefox 3.5.4
Score 463 362
Richards 1406 1249
DeltaBlue 145 116
Crypto 962 643
RayTrace 342 259
EarleyBoyer 365 341
RegExp 256 188
Splay 728 522

3.6 Betaは、性能の向上がはっきりと見て取れる。約28%とSunSpiderよりも差が開いている点は興味深い。JavaScriptチームは、2009年第4四半期の目標として、V8 Benchmarkのスコアを10月1日時点のTrunk比で最低2倍に高めることを掲げており、その成果の一部がFirefox 3.6に取り込まれているものとみられる。おそらく、RCのコードフリーズまでに、もう少し追加されるだろう。

Dromaeo

Dromaeo(JavaScript Performance Testing)は、Mozilla謹製の重量級ベンチマークだ。JavaScriptエンジンの真価が問われる。最終結果のみ表に載せておくが、今回からは、詳細を比較表から確かめられるようにした。

Firefox 3.6 Beta Firefox 3.5.4
Total 108.88runs/s ±3.00% 82.94runs/s ±3.16%

3.6 Betaの総合スコアが約31%高く、これはPGOの効果だけでは説明がつかない。TraceMonkeyの強化が影響していることは間違いないだろう。Firefox 3.5のリリースから約4か月ほどが経過したが、この間の開発成果としては立派なものだ。

総合評価

Firefox 3.6 Betaは、ほとんどのケースで、Firefox 3.5.4よりも高速である。そのことは、ページの読み込み速度とJavaScriptの処理速度において目立っており、とくにJavaScriptに関しては、開発チームが20%の向上としているのに対し、実はそれ以上かもしれないと思わせる。

たしかに、Firefox 3.0から3.5へとバージョンアップしたときは、1.5〜2倍もパフォーマンスがよくなっていたから、それと比べると見劣りするように感じるかもしれない。

しかし、jit.chromeの設定がデフォルトでtrueになったり、interruptible reflowと呼ばれる機能が投入されたりしたことでUIの応答性が高まっているし、places.sqliteの自動vacuumが加わってパフォーマンスの低下も抑えられている。こうした点も併せて考慮すべきである。

従来は、ひたすらコンテンツの処理速度を引き上げるところに力を注いできたが、Firefox 3.6では、せっかくのプラス要素を相殺してしまうような個所も同時に改良している。これによって、ベンチマークの結果以上に速さを体感できることだろう。