「iOS 4.3でホーム画面に保存したWebアプリは動作が遅い」と言われたら、誰でもエッと思ってしまう。実際、iOS 4.3のSafariで動作するiPad 2のSunspider-0.9.1の結果が2100ms前後であるのに対して、フルスクリーンモードで動作する状態でホーム画面に保存したものを実行すると約5200msに落ち込むのだ。

iOS 4.3のSafariのSunspider (0.9.1)ベンチマークは2144ms

同じデバイス、同じネット環境でもホーム画面に保存したフルスクリーンモードで実行すると5225msに

これをThe Registerは「iPhoneのホーム画面で、オープンなWebアプリに手錠をかけるApple」という見出しで報じ、その中で「AppleはWebアプリの品質が低く感じられるように、ちょっとした不具合を利用している」という匿名のモバイルWebアプリ開発者の指摘を紹介している。

しかし、このiOS 4.3の同じふるまいを「iOS 4.3のモバイルSafariでは、Webアプリがとても高速に動作する」と表現すれば、まったく逆の印象になる。iOS4.3でホーム画面から起動させたフルスクリーンモードのWebアプリのSunspiderの結果は、iOS 4.2のSafariで実行した場合とほぼ同じ。つまりiOS 4.3でホーム画面に保存したWebアプリは従来のまま、または若干速く、そしてiOS 4.3のSafariだけが飛躍的に速くなっている。

これは遅いのか? それとも速いのか? そもそも同じOSで同じWebアプリを使っているのに、性能にばらつきがあるのが混乱の元である。一体、Appleの狙いは何なのか? そんな論争がiOS 4.3リリース後から続いている。

Nitro搭載はWebKit2への布石?

この議論のスタートは、ある勘違いがきっかけだった。カナダのBlaze Softwareという会社が、最速のモバイルブラウザを調べるために45,000のWebページを実際にロードするテストを行った。その結果レポートの中で「iPhoneのSafari(iOS 4.3版)はAndroidのブラウザより52%も遅い」「iPhoneとAndroidの最新版ではJavaScriptエンジンの最適化が進んだが、ブラウジング(Webページロード)速度はあまり向上していない」と指摘したのだ。

この意外な結果はまたたく間に広がり、そして間もなくレポートの内容を検証した複数の開発者やアナリストによってBlazeのテスト方法および結果分析の不備が指摘された。同社はブラウザでWebぺージを開いたのではなく、OSのブラウザ機能を埋め込んだ独自アプリを用いていたのだ。iOSの場合はSafariベースのUIWebView、AndroidはChromeベースのWebViewが使われたことになる。UIWebViewのブラウジング機能は限定的で、最新版のSafariの最大の強化点であるJIT機能Nitroにアクセスできない。これでは最新のモバイルSafariとAndroidブラウザのフル機能の比較にはならない。2つめの「JavaScriptエンジンの最適化がブラウジングの向上に影響しない」についても、Nitroが効いていないのだから当然である。Androidの場合はv2.2でJITをDalvikに組み込んで大幅な高速化を果たしており、v2.3ではおだやかな伸びだったのが分析に影響したと見られている。

Blazeのレポートの騒動はすぐに落ち着き始めたものの、その勘違いが「Appleは、なぜNitroをSafari内に限定してるんだ?」という新たな論争に発展した。UIWebViewがNitroにアクセスできないのならば、ホーム画面に保存したWebアプリや、iOS用のブラウザアプリ (SkyFireなど)、ブラウザ機能を組み込んだiOSアプリ(PhoneGapなど)のブラウジング性能も限られる。

The Registerのような騒ぎを好むメディアは、AppleはHTML5支持を表明しながら、その一方でFlash同様にWebアプリを排除していると論争を煽った。だがiOSアプリも制限を受けているのだから、この見方は少々的外れである。開発者サポートフォーラムではバグの可能性も指摘されているが、現時点で有力なのはセキュリティだ。これまでのWebKitのアーキテクチャでは、アプリケーションとWebKit APIの間の境界を含めて、すべてが1プロセスにまとめられている。JIT(Nitro)を採用するならば、メモリに置かれるページングファイルがUIプロセスから実行されるのを防ぐ必要がある。WebKit2ではプロセスが分割され、WebプロセスがUIプロセスから独立する。マルチプロセス対応、レスポンス、セキュリティに優れた構造になるが、それまではセキュリティを優先してNitroをSafari内にとどめているというわけだ。

Mac WebKitとWebKit2

Webサービスの利用を重視したAndroidおよびChromeの組み合わせは、システム全体でブラウジングのスピードを引き出せる設計だが、Dalvikにはネイティブアプリとしての実行パフォーマンスの問題がつきまとう。iOSは逆にネイティブアプリ寄り。しかしながら、フルスクリーンモードのWebアプリをホーム画面に置けるなどWebアプリの使い勝手も良好だ。そのバランスがiOS 4.3で崩された。

これを不便になったと言うべきか、それとも速くなったと評価すべきか。Appleの真意は分からないが、やはり速くなったと呼びたいところである。モバイル市場における縄張り争いの話には、いささか食傷している。後者なら、Appleがバランスを崩してもJavaScript実行の向上に踏み出した可能性が広がる。