新しいJavaScriptエンジンとして「Nitro」を採用したことも、大きなトピックだ。Safariのエンジン部分はKHTMLに由来する「WebKit」であり、開発はAppleが主導するもののオープンソースプロジェクトとして進められている経緯から、主要な新機能はすでに知られていた。
Nitroは聞き慣れない名前だが、スクラッチから書き起こしたとは考えにくく、すでにWebKitプロジェクトの成果物として公開されている「SquirrelFish」、あるいは「SquirrelFish Extreme」をリファイン (ひょっとすると改名だけ) したものと推定することが妥当だろう。
したがって、大幅に向上したというパフォーマンスも想定の範囲内だ。Safari 4パブリックβ版の公開に伴いAppleが発表した紹介文には、「JavaScriptをIE7より最大30倍速く、Firefox 3よりも3倍以上速く実行します」というくだりがあるが、筆者のコラム『OS X ハッキング! 「第294回 鯛と猿、どちらが速い? WebKit / Firefoxの開発版を試す」』では、SquirrelFish ExtremeベースのWebKitはSafari 3やFirefox 3に大差をつけたことをすでに報告している。Appleが公開した主要ブラウザとのパフォーマンス比較とあわせてご確認いただきたい。
定番JavaScriptベンチマーク「SunSpider 0.9の結果は、下表のとおり。全体のスコアで判断すると、Safari 3に比べたパフォーマンスの改善幅は約325%、SquirrelFish Extremeを対象とした「第294回 鯛と猿、どちらが速い? WebKit / Firefoxの開発版を試す」の時点における約373%ほどではないが、大幅に改善されていることがわかる。
それでも、SquirrelFishを対象とした「第289回 WebKitで一足お先に? 「次のSafari」を試す」からの改善幅が明らかなことから判断すると、今回のNitroはおそらくSquirrelFish Extremeベースであり、最適化の度合いかなにかの理由で若干のスコアダウンがあったものと思われる。
個別のテストを見てみよう。改善幅が大きいものには、アッカーマン関数などの再帰計算を行う「controlflow」(約1,393%)、ビットシフトによる計算を行う「bitops」(約824%)、2分探索木や素数の計算を行う「access」(約495%) が挙げられる。いずれも演算を繰り返し行うもので、推測どおりSquirrelFish Extremeがベースであれば、コードをネイティブコードに変換してから実行するJust In Time (JIT) コンパイラの効果が大きいものと考えられる。もっとも改善幅が狭かったのは、文字列操作を行う「string」だが、それでも約208%というスコアを達成している。Nitro採用によるWebアプリの速度改善はかなり期待できる、と見ていいだろう。
■SunSpider 0.9のスコア (単位:ミリ秒) | ||
---|---|---|
Safari 4 PB | Safari 3.2.1 | |
3d | 187.0 | 396.2 |
access | 104.4 | 516.6 |
bitops | 54.8 | 451.8 |
controlflow | 6.4 | 89.2 |
crypto | 61.4 | 234.4 |
date | 89.4 | 282.2 |
math | 150.2 | 445.6 |
regexp | 40.6 | 199.0 |
string | 307.8 | 641.8 |
TOTAL | 1002.0 | 3256.8 |
※:MacBook Pro 2.33GHz / RAM 2GB / Mac OS X 10.5.6で測定