JavaScriptの高速化手法とオープンソース同士の競争

2009年3月3日

JavaScriptの実行速度をいかに速くするか。これが最近のWebブラウザの大きなセールスポイントになっていますが、そこではオープンソース同士で高速化手法のパクり合い、いや、情報共有が積極的に行われているそうです。

JavaScriptっていままでどれだけ遅かったんだよ、と思うほど最近の高速化競争は激しいものがあります。ざっくりと見てみましょう。

先日アップルがSafari 4のβ版を公開しましたが、@ITの記事によると、IE7と比べて最大30倍の速度向上なのだそうです。

JavaScriptを、Internet Explorer 7より最大30倍速く、Firefox 3よりも3倍以上速く実行

ちなみにOperaは最大で50倍の高速化を実現するJavaScriptエンジン「Carakan」を開発中

そしてFirefoxが次期バージョンで搭載予定のJavaScriptエンジン「TraceMonkey」は最大で現バージョンの22倍速

ほかにも、Google Chrome、Internet Explorer 8もJavaScriptの実行速度の向上をうたっていることは皆さんご存じの通りです。

これだけ劇的な高速化には、いったいどのような手法が用いられているのでしょうか。Mozilla Japanテクニカルマーケティング担当の浅井智也氏が、FirefoxでのJavaScriptの高速化について解説したスライド「Trace Monkey」がとても詳しくて分かりやすかったので紹介します。

このスライドによると、JavaScriptの実行が遅い原因は主に4つ。

つまり、実行時に逐次解析しつつ、演算するまで変数のデータ型が分からないため型チェックと型変換が頻繁に起きて、オブジェクトの構造が決まってないから確保すべきメモリ領域も事前に決められず、配列がない代わりにハッシュでデータアクセスしている。だから遅いらしいです。

というわけで、これらを解決する手段として、ジャストイン・コンパイラ、ループの直前では型付けしてループ、内部的に仮クラスや配列を設定する、という手法がとられるとのこと。

また、Tracingと名付けられた、実行プログラムのボトルネックを見つけ出してそこの実行を最適化することで全体の実行速度を向上させる手法も開発中だそうです。

ところで、この浅井さんのこのスライドの4pにはこんな一文があります。

高速化する技術をガンガン実装中
オープンソースで互いの手法をパクりあい(爆)

冗談のように書かれているのでどれだけリアルなのか計りかねますが、それでもGoogle Chrome、Safari、FirefoxのオープンソースによるWebブラウザが、それぞれお互いの手法を自由に取り入れて高速化を実現しようとしている様子を想像してしまいます。お互いのソースコードやメーリングリストなどでの議論の内容を自由に見ることができるわけですから、それぞれイイトコドリをすることはまったく自然なわけで、いろんな形で情報共有が行われていてもおかしくありませんよね。

こうやって複数のオープンソースのチームが競っている状況というのは、企業同士が手の内(ソースコード)を隠しながら競争しているのとはまったく違って、お互いのいいところを自由に取り入れながら競争しているわけで、あっというまに一方の優位性が他方に取り入れられて差がなくなる。それゆえに激しい競争とものすごいスピードでの進化が起きているような気がします。オープンソースの1つの優位性ですね。

一方で、マイクロソフトやオペラ。彼ら商用ソフトウェア陣は、おそらくコードがオープンソースで汚染されないように、オープンソースから隔離された状態で開発をすすめていかなくてはいけない状況になっているのではないでしょうか。もちろん、ここで紹介したような手法レベルの情報については自由に参照することができるのでしょうけれど、開発チームがオープンソースのコードを参照することはたぶん禁じられているはず。

僕自身は商用ソフトもオープンソースも同じように発展してくれることを祈る一人ではありますが、この戦いの状況では商用ソフトのほうが不利ではないかと思います。CNET Japanの記事「オープンソースブラウザ、IE8とOperaを圧倒--JavaScript最新ベンチマーク:マーケティング - CNET Japanから。ベンチマークでオープンソースチームが圧勝したという記事。

同テスト結果によれば、プロプライエタリなブラウザメーカーであるMicrosoftとOperaは、大きな遅れを取っている。
パフォーマンスという分野で、あらゆるオープンソースブラウザが、実に大きな差をつけて、プロプライエタリなブラウザを破っている。

もちろんベンチマークは性能の一部のみを表したもので、これが実力差であると結論付けるのは偏った見方になる恐れがあります。それにこうした状況が本当かどうかはまったくの僕の推測です。

しかし、商用ソフトウェアがこの状況をはねのけるには相当な努力が必要なんだろうなあと、プログラマはオープンソース陣営が高速化したコードを覗いてみたいんじゃないかなあと、僕はそこに思いをはせずにはいられません。

このエントリーをはてなブックマークに追加
follow us in feedly

タグ : JavaScript , Mozilla , Webブラウザ , オープンソース



≫次の記事
Google、Twitter、Yahoo Pipes、Netvibesを華麗に使いこなす英国政府
≪前の記事
Ajax ~ 入門記事、解説記事などのまとめ

Loading...

Blogger in Chief

photo of jniino Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。新しいオンラインメディアの可能性を追求しています。
詳しいプロフィール


Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed



Publickey 最新記事 10本

Publickey Topics 最新記事 10本


PR - Books


fig

fig

fig

fig



blog comments powered by Disqus