iOSの4.3で導入されたNitroエンジンが5ではUIWebViewでも使えるようになるのではとの記事を見つけたのでPhoneGapとSafariでJavaScriptの性能にどれくらいの差があるのかと思い軽く調べてみました。PhoneGapはUIWebViewがベースで、SafariはNitro(JIT)装備の比較になります。
- iPad (初代)
- iOS最新版(iOS 5.0)
- PhoneGap1.1.0
- Xcode 4.1
アプリはindex.htmlにSunSpider JavaScript Benchmarkへのリンクを張っただけの単純なもの。
結果...Totalだけを記載すると- Safari 2886.3ms
- PhoneGap 9498.4ms
その差は約3.3倍。同じテストをiPhone 3GSで走らせるとやはり3.5倍ほどPhoneGapの方が遅い。残念ながらJITは使われていませんね。
少し調べてみるとどうやら4.3以降ではメモリにmprotectでPROT_EXECをセット出来るらしいのだが、普通には無理なようです。ここまでわかっていながら出来ないのはなんとも。LuaJITもiOSのアプリに組み込めますが名前に反してJIT機能は無理。iOS4から5になっても状況はあまり変わらない。
セキュリティのためとはいえキビシイですねえ。
と、これだけでは何なのでPhoneGap 1.1.0で外部サイトへのリンクを使う場合にご注意。
ドキュメントにも書いてあるのですが、1.0と違いPhonegapアプリ内のリンクで外部サイトへ飛びたい場合white-listに追加しておかないと動作しません。
- Xcodeで<Project>/Supporting Files/PhoneGap.plist内のExternalHostsキーに"Add Row"して"*.webkit.org"等とホスト名を追加
です。少しはまったので。