Apple の WebKit チームは、Web ブラウザの JavaScript 実行のパフォーマンスをプロファイリングするための改良された新しい SunSpider 1.0 ベンチマーク スイートをリリースしました。これは、2007 年末に最初にリリースされた 0.9 バージョンに代わるものです。
SunSpider は当初、JavaScript エンジンがさまざまなタスクをバランスよく実行できる速度を測定し、新しい進歩がどれだけ効果的かをプロファイリングすることを目的としてリリースされました。
JavaScript は Web のプログラミング言語であり、数値計算から日付や正規表現の操作、オブジェクト指向プログラミング タスクまでさまざまなタスクを処理します。これらのタスクにより、もともとシンプルだった Web ブラウザーが、機能豊富な Web アプリケーションをホストできるプラットフォームへと変化しました。
JavaScript は、iOS の iAd、iBooks で使用されるインタラクティブ ウィジェット、iTunes LP アルバムや、映画や関連ボーナス マテリアル用の DVD のようなインタラクティブ メニューの iTunes Extras など、iTunes での動的コンテンツの開発など、Web ブラウザー外でのインタラクティブ機能の強化にも使用されます。
Apple の新しい iAd Producer 4.0 (下図) は、ブラウザを使わない JavaScript を利用した 3 種類のコンテンツすべてを開発するためのツールを提供します。
SunSpider 0.9 がリリースされてから 5 年半の間に、Safari 3 を実行する 2007 年の一般的な 2.33 GHz コンピュータから、Safari 6 を実行する最新の 2.2GHz i7 MacBook Pro に至るまで、JavaScript パフォーマンスが 30 倍以上向上したことが記録されています。
リリースされたばかりの新しいバージョン 1.0 では、最新の JavaScript エンジンのより洗練された設計を考慮して、「多数のバグを修正し、テストの精度と再現性をさらに向上させることを目指しています」。
HTML5を支えるJavaScriptエンジンの進歩を追跡する
SunSpider ベンチマークが初めて登場した 2007 年当時、JavaScript の実行は、Web サーバーによるリモートではなく、ローカル クライアント側の Web ブラウザー内で基本的な計算を実行する方法として Netscape によって 1995 年に導入されて以来、劇的には変化していませんでした。
SunSpider の登場後、動的な Web ページにさらに高度なプログラムを導入しようとする強い意欲が高まり、JavaScript テクノロジが劇的に進歩しました。最初は「Ajax」という用語で呼ばれ (サーバーで再描画する必要なく、ブラウザ内で更新できる Web ページに関連しています)、その後、HTML5 に関連する「リッチ Web アプリ」の可能性と結びついて発展しました (「Apple が HTML 5 に賭ける理由: Web の歴史」も参照)。
2008年、WebKitチームはオリジナルのJavaScriptCoreを、直接ディスパッチレジスタベースの高レベルバイトコード仮想マシン「SquirrelFish」として書き直すことを発表しました。その後、MozillaはFirefox向けのTraceMonkeyエンジンを発表し、GoogleはChromeのJavaScriptパフォーマンスを高速化するためにV8エンジンを買収しました。
その年が終わる前に、そして SquirrelFish が Safari の出荷バージョンに搭載される前に、プロジェクトは「SquirrelFish Extreme」という名前でさらに強化され、バイトコードを生成する代わりに、Just In Time コンパイラを使用して JavaScript をネイティブ マシン コードに変換し、JavaScript の実行を高速化しました。
2009年、Appleは「Nitro」というブランド名でSafari 4に機能強化を適用し、新しい実装によりJavaScriptの実行速度が最大4.5倍になると述べた。
翌年、同社は Safari 5 で新しい SquirrelFish Extreme 拡張機能をリリースし、Mac での JavaScript パフォーマンスが以前の Safari 4 よりさらに 30 パーセント向上しました。2011 年には、iOS 4.3 のモバイル Safari に Nitro を追加し、Apple のモバイル デバイスでの JavaScript パフォーマンスが 200 パーセント向上しました。
JavaScriptの将来の進歩を示す新しいベンチマーク
1 年前、WebKit は JavaScriptCore のさらなる機能強化を発表しました。これにより、JavaScriptCore は、バイトコード仮想マシンまたはネイティブ マシン コードをオンザフライで構築する JIT (Just In Time コンパイラ) のいずれかの標準インタープリタにコードを渡す前にコードの実行を試行するために使用する、効率的な新しい LLInt (低レベル インタープリタ) を組み込んで「三層仮想マシン」になりました。
刷新された新しいSunSpiderは、現代のJavaScriptエンジンにおけるこうした複雑性の増大を考慮に入れています。WebKitの発表で説明されているように、この複雑性のため、「ベンチマークで正確性の検証を行うことは理にかなっています。ベンチマークは、適合性テストでは不可能な方法で最適化JITに負荷をかけることができる独自の機能を持っています。これは私たち自身の経験に基づいています。ベンチマークに検証を追加することで、より早くバグを発見できるようになりました。」
改訂版ベンチマークでは、新たな検証チェックに加え、ブラウザがテストの各部分を完了してから次のテストに移れるようにするために追加されていた遅延が削除されています。しかし、これらの遅延によって結果が歪んでしまう問題が発生していました。高速ハードウェアでは、テストスイートに組み込まれた遅延によってハードウェアの電力管理機能が作動し、パフォーマンスが低いという誤った印象を与えてしまうことが散発的に発生していたためです。
HTML5の未来を競う
AppleとGoogleは、デスクトップブラウザとモバイルデバイスの両方でHTML5リッチアプリを可能にするという目標を掲げ、WebKitの改良に5年以上にわたって緊密に協力してきたが、Googleがプロジェクトを分岐させ、独自のChromiumコードを単独で開発することを決定した(現在は「Blink」というプロジェクト名で)ため、両社は現在、取り組みを分離している。
これにより、GoogleはAppleのNitroエンジン(Chromeでは使用されていない)へのリンクをすべて削除できるようになり、メインのWebKitプロジェクトからChromiumコードも同様に削除する必要が生じます。これは、AppleのWebKitウェブエンジンを使用しながら、ChromiumのV8 JavaScriptエンジン(現在はChromiumの一部)と組み合わせているSamsungなどのサードパーティに影響を与える可能性があります。
いくぶん皮肉なことに、Google による Apple の WebKit プラットフォームの断片化 (プラットフォームの最大の独立ユーザーとして) は、Samsung が Google の Android プロジェクトに対して行うと多くの人が予想していることと似ており、最終的には Google が自社のプラットフォームを維持し、Samsung が Amazon やさまざまな中国のフォークの後を追って独自のコピーを実行することになります。
同時に、Google は JavaScript を独自の新しいウェブプログラミング言語 Dart に置き換えるプロジェクトにも投資しましたが、この動きは Apple、Mozilla、Microsoft から反対されました。
2011年末、Appleのオリバー・ハント氏は、「Dartのような非標準言語への直接的かつ公開されたサポートを追加することは、オープンウェブにとって敵対的です。なぜなら、起こりうるあらゆる『コンセンサス』に基づく言語開発を放棄し、代わりに私たちが望む言語をウェブに押し付けることになるからです。これは暗黙のうちに、独自の拡張機能をサポートするブラウザを、Microsoft独自のVBScriptのようなものをサポートするブラウザと同じ立場に置くことになり、同じ効果をもたらします。つまり、単一の製品でしか効果的に機能しないコンテンツを作成することで、オープンウェブを破壊することになるのです。」と警告しました。
Googleは2011年にDashを積極的に利用しただけでなく、Adobe Flash(Chromeブラウザに組み込み)を推奨し、H.264ビデオ規格を廃止して独自のWebMビデオコーデックを採用しようと試みました。しかし、モバイルデバイスがiOSに支配されているという現実によって、これら2つの取り組みは頓挫しました。Googleはその後、自社のChromiumフォーク「Blink」内でDartの採用を推進する予定はないと表明しました。
Apple は来月の世界開発者会議で、iOS 7 および OS X 10.9 向けの WebKit の最新技術を組み込んだ Safari の新バージョンを発表する予定です。