JavaScriptベンチマーク
性能評価によく用いられる「SunSpider」および「Octane」を用いて、JavaScriptの実行速度を計測しました。また、こちらのサイトを用いて、ECMAScript 6への準拠についても確認しました。
iOS 8 WKWebView | iOS 8 UIWebView | iOS 7 UIWebView | |
---|---|---|---|
SunSpiderベンチマーク | 949.8ミリ秒 | 4249.6ミリ秒 | 3659.5ミリ秒 |
Octaneベンチマーク | 2908 | テスト中にアプリがクラッシュ | テスト中にアプリがクラッシュ |
ECMAScript 6互換性 | 28/71 | 28/71 | 2/71 |
SunSpiderベンチマークの実行結果から、UIWebViewと比較して、WKWebViewは大幅に性能が向上していることが分かります。WKWebViewは、JIT(Just-In-Time)実行方式を採用した「Nitro」エンジンに切り替えられています。そのため、ベンチマークからは4.5倍の速度向上が見込めることが分かりました。
同時に、Octaneベンチマークの結果より、必要とするメモリ量も削減されていることが分かりました。UIWebViewでは、ベンチマーク中にメモリ不足でクラッシュしていたものが、WKWebViewではベンチマークスコアを表示するところまで到達しました。ハイブリッドアプリの安定性も大きく改善されそうです。
実際のアプリでのベンチマーク結果
次の表は、Canvasを用いたベンチマークツールを用いて、iOS 8のWKWebViewがどの程度高速化されるかを確認した結果です。
iOS 8 WKWebView | iOS 8 UIWebView | iOS 7 UIWebView | |
---|---|---|---|
HTML5-Benchmark.com | 4113 | 3277 | 3377 |
UIWebViewと比べて、よりスムーズに動作していることが確認できます。一般的なアプリで考えた場合、JavaScriptが中心のプログラムであれば、20%程度のパフォーマンス向上は見込めるのではないでしょうか。
APIの違い
実は、WKWebViewはUIWebViewとAPIレベルの互換性がありません。そのため、UIWebViewからWKWebViewに移行するためには、文字列置換以上の修正を行う必要があります。その分、APIのアーキテクチャはよりモダンなものとなり、実装もシンプルに記述できるように改良されています。
WKWebViewの最も大きな変更は、ハイブリッドアプリの中核部分であるブラウザ側とネイティブ側のブリッジ方法が組み込まれたことです。PhoneGapなど既存の仕組みでは、内部的にAJAXで呼び出したり、IFRAME要素を使ったりして、少し回りくどい呼び出しとなっています。WKWebViewを用いると、各レイヤに直接データを渡せます。そのため、ブリッジ処理はより正確で、オーバーヘッドが少なくなるでしょう。
Monaca/PhoneGap/CordovaでWKWebViewを用いる
モバイルアプリケーション向けフレームワークのMonaca、PhoneGap、Cordovaでは、現在のところUIWebViewが用いられています。これをWKWebViewに切り替えるだけで、アプリの実行速度が大幅に向上されます。しかし、ブラウザエンジンとしては全く別物であるため、相当の移植作業が必要となります。とはいえ、遠くない将来、iOS 8向けにWKWebViewで利用可能にされるでしょう。
また、MonacaやPhoneGapに関するトピックとしては「Swift言語」があります。ネイティブ側を拡張できるプラグインという仕組みがあり、その実装にSwift言語を使うことができるようになりました。iOS 7でも利用できるため、ネイティブコードを書く人にとっては良い情報です。
最後に
今回の記事は、MonacaのiOS 8対応に際して調査し、把握したことを記述しました。今後、ハイブリッドアプリのパフォーマンスはますます向上するでしょう。「Onsen UI」のようなモダンなJSフレームワークと組み合わせることで、「ネイティブ対ハイブリッド」の議論が過去のものになるのは、時間の問題だと感じました。
本稿で取り上げた以外にも、iOS 8のWebViewに追加・修正された機能があるかもしれません。筆者は引き続き、ハイブリッドアプリの可能性に注目していきたいと思います。