数ヶ月の開発を経て、GoogleのV8エンジンをベースにしたNativeScriptのiOS用新JavaScriptランタイムがベータ版になった。このランタイム変更によって、iOSアプリの起動時間は短縮され、NativeScriptの開発プロセスは簡単になるはずだ。
iOSのネイティブJavaScriptエンジンであるJavaScriptCoreを置き換える根本的な理由は、NativeScriptチームのメンテナンス作業を簡単にすることにある、NativeScriptのプロダクトマネージャであるEmil Tabakov氏は書いている。実際、NativeScriptチームは必要なもの全てをサポートするため、JavaScriptCore(Tabakov氏によると埋め込みフレンドリーでないフレームワーク)に頑張って対応させてきた。
しかし、こうした労力にもかかわらず、iOSのJavaScriptCoreを使った場合、主にV8でしか使えない機能のためにAndroidと完全に同等の機能を実現することができなかった。例えば、V8 heap snapshotsを使っている機能だ。これを使うことで、appパッケージに格納された既成のイメージからJavaScriptコンテキストを初期化するすることが可能になる。NativeScriptチームによると、V8 heap snapshotsを使うことで、単純なアプリケーションの起動時間が30%以上削減されるという。
iOSでV8が使えるようになったのは、2019年のはじめにJITなしモードがV8に導入されたためだ。これにより、iOSなどの組み込みプラットフォームで許可されないランタイムでの実行可能メモリ割り当てをオフにすることができる。ただし、残念なことに、これはパフォーマンスの低下を伴う。JITなしのV8は、基本的にJavaScriptインタプリタとして動作するためだ。V8チームのベンチマークによると、最高に最適化されたコード、すなわち特定の言語特性を行使するコードではパフォーマンスへの影響が大きいが、実際のアプリケーションではそれほど大きくはない。
最後に、Tabakov氏によると、V8への切り替えは、Apple Watchアプリを書くための要件であるBitcodeの今後のサポートへの道を開くものだという。
iOS用のNativeScript V8ランタイムはベータ版であり、プロダクションレディになるにはまだいくつかの作業、具体的にはarmv7サポートと完全なマルチスレッド化が必要だ。したがって、開発者は自己責任で使わなくてはならない。
新しいランタイムを使うには、まずtns platform add ios@beta-v8
を実行してインストールしてから、通常通りにアプリを起動すればよい。問題があればNativeScript V8 iOSランタイムのリポジトリに報告するとよい。