Firefox web browser - Faster, more secure & customizable

Mozilla Hacksに掲載された記事「Gap between asm.js and native performance gets even narrower with float32 optimizations」が、asm.jsおよびJavaScript実行環境の最適化を進めた結果、発表当時はC++よりも2倍ほど遅かった実行速度が、C++と比較して1.5倍の遅さにまで詰め寄ったことを伝えた。この方法はほかのブラウザのJavaScript実行環境にも適用可能で、今後さらにほかのブラウザでの実行速度が高速になる可能性がある。

記事に掲載されているグラフはLLVM Clang 3.2でビルドしたバイナリの実行結果を1とし、それと比較してどの程度の速度で動作するかを相対的に示している。比較対象となっているのは最適化が施されたあとのFirefox、そうではないFirefox、それにGCC 4.6となっている。

Gap between asm.js and native performance gets even narrower with float32 optimizationsより抜粋

Gap between asm.js and native performance gets even narrower with float32 optimizationsより抜粋

今回使われた最適化はfloat64を使っている処理を可能な限りfloat32へ置き換えるというもの。精度が高いためfloat64の使用が推奨されてきたが、処理速度的にはfloat32の方が速い。このため、float64で演算しなければならない場合を除いて、可能な限りfloat32で演算するように処理を変更したことが、全体のパフォーマンス向上につながっている。

またグラフではLLVM Clang 3.2と比較してGCC 4.6の方が性能が優れている。このあたりはバージョンが変わると大きく性能も変わるので注意が必要。現在リリースされている最新のLLVM Clangのバージョンは3.3。さらに数日以内に次のバージョンとなるLLVM Clang 3.4のリリースが予定されている。最新版ではさらに性能が向上している。