FacebookエンジニアのNatansh Verma氏は、iOS向けのFacebookアプリのローンチタイムを数秒カットした方法を説明した。
Verma氏によると、ローンチタイムを最適化する初めの一歩は静的なメトリクスを定義することだという。例えば、彼らはフィードのロードが完了した瞬間が、ローンチプロセスがいつ完了するかを予想する良い参考になることを見出した。加えて、いわゆる“コールドスタート”、すなわち、アプリをローンチする時間を最適化することを決断した。すでにバックグラウンドで動作しているアプリがイベントによって再開するウォームスタートと比べ、コールドスタートは全く稼働していないところから処理が始まるため、より長い時間が掛かるのである。
アプリを計測してみると、Facebookエンジニアは、最初のフィードリクエストを送り出す初期化工程の時間が長過ぎると気付いた。これには2つの異なる方法で対処した。
- 最初のネットワークリクエストでは有効な認証トークンと利用可能なフィードカーソルだけが必要なので、パスにあるそれ以外の不要な依存性を分析し、排除すること。
- セキュアなTCPコネクションを確立するのに掛かる時間に取り組むこと。UDPプライミングと呼ばれる技術のおかげで、サーバに3ラウンドトリップを要求する。手短に言うと、アプリは暗号化されたUDPパケットをフィードリクエストに乗せてサーバに送る。これによって正当なTCPリクエストが来ていることをサーバに暗示し、プリフェッチとデータをキャッシュをしておける。
最初のフィードリクエストが送信されたことをできるだけ早く確かめたあと、Facebookエンジニアは他の領域でもストーリーフェッチングの方略において改善の余地を確認した。3つのうち2つのバッチにあるストーリーと7つのストーリーの提供から、1+1+Xのバッチで提供したストーリーにあるストリームライクなモデルに移行した。
興味深いことに、最初のストーリーが戻ってくるのに掛かる時間を削減することでレンダリングエンジンを遅くするアプリサービス間のリソース競合をいくつかハイライトする効果があった。この特定の問題はキューメカニズムの導入で解決され、それによってサービスはアプリの起動が完了し次第、動作を始められた。
まとめると、Verma氏が言うには、これらの最適化はアプリのローンチタイムに数秒の改善をもたらした。
モバイルアプリのローンチタイムはユーザエクスペリエンスの重要な要因であり、Appleはユーザがアプリを使う気がなくならないよう、極力短くするべきだと提唱している。