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は、大きな遅れを取っている。
パフォーマンスという分野で、あらゆるオープンソースブラウザが、実に大きな差をつけて、プロプライエタリなブラウザを破っている。

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

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

あわせて読みたい

JavaScript Web技術 Mozilla Webブラウザ オープンソース




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

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

最新記事10本