ベースライン プロファイルを使用すると、一般的なユーザー ジャーニーの インタープリタとジャストインタイム(JIT)コンパイル の手順を行う必要がなくなるため、コード実行速度が最大 30% 向上します。ベースライン プロファイルでは、最適化するユーザー ジャーニーを選択できます。また、アプリの起動の改善、ジャンクの削減などにも役立ちます。これにより、ユーザーの継続率や評価など、ビジネス指標の改善につながります。詳しくは、ベースライン プロファイルをご覧ください。
Android カレンダー チームはベースライン プロファイルを実装し、アプリの 起動時間が約 20% 改善され、遅延またはフリーズしたフレームが約 50% 削減されました。パフォーマンスの向上を実現するためにチームが行ったエンドツーエンドの取り組みをご紹介します。ベースライン プロファイルの使用を決定した理由から、効果の測定方法まで。
クラウド プロファイルとベースライン プロファイル
Android カレンダー チームは、アプリに対する実際のユーザー操作に基づく別のプロファイルに基づく最適化(PGO)手法であるクラウド プロファイルをすでに使用していました。クラウド プロファイルとベースライン プロファイルの比較は次のとおりです。
| プロファイル タイプ | 設定 | 含まれるユーザー ジャーニー | ユーザーベースが次の場合に最適 | 実現した効果 | サポートされている Android バージョン |
|---|---|---|---|---|---|
クラウド プロファイル |
デフォルトで有効 |
実際のユーザーデータに基づいて自動的に選択 |
大 |
2、3 日以内 |
Android 9(API レベル 28)以降 |
ベースライン プロファイル |
自分で構成 |
自分で選択 |
すべてのサイズ |
即時 |
Android 7(API レベル 24)以降 |
Android カレンダー チームがベースライン プロファイルをコードベースに追加した主な理由の 1 つは、リリース サイクルを週単位に短縮したことです。 クラウド プロファイルはパフォーマンスを大幅に向上させますが、実際のユーザーデータの集計に依存するため、アプリのリリースから効果が最大になるまで 1 ~ 2 日 かかります。クラウド プロファイルにベースライン プロファイルを補完することで、次のアプリ バージョンがロールアウトされる前に、ユーザーが最高のパフォーマンス改善を体験できる時間を増やすことができます。
また、Android カレンダー チームは、プロファイルに含めるクリティカル ユーザー ジャーニー(CUJ)を具体的に選択できることが重要でした。これは、ベースライン プロファイルを使用して行うことができます。
通常、最高のパフォーマンスを得るには、デフォルトで有効になっているクラウド プロファイルに加えて、ベースライン プロファイルを使用することをおすすめします。
含まれるユーザー ジャーニー
Android カレンダー チームは、ベースライン プロファイルに次の 2 つの CUJ を含めることにしました。
- スケジュール ビューでアプリを開く: 最初はデフォルトのビューであるため、アプリを初めて使用するユーザーやデフォルト設定を変更しないユーザー向けに 最適化することが重要です。
- 月表示でアプリを開く: ユーザー データに基づいて、多くのユーザーが選択したビューです。ユーザーがアプリをどのように使用しているかをトラッキングするには、 Firebaseなどのツールを使用できます。
通常、ビジネスに収益をもたらす CUJ(該当する 場合)と、最も一般的な CUJ を追加する必要があります。最適化する CUJ の選択方法について詳しくは、含めるものをご覧ください。
実装
Android カレンダー チームは、 Jetpack Macrobenchmark ライブラリ の内部ラッパーを使用してベースライン プロファイルを生成し、内部ツールとの統合を容易にし、 一般的なスケーラビリティを実現しています。
スケジュール ビューでアプリを開くための Macrobenchmark テスト構成は次のとおりです。
@Test
fun generateProfile() =
baselineProfileRule.collect(PACKAGE_NAME, includeInStartupProfile = true) {
uiAutomator {
startApp(packageName = PACKAGE_NAME)
// Verify pre-existing recurring events and tasks are shown.
// onElement waits for the element by default
onElement { textAsString() == "Recurring event" }
onElement { textAsString() == "Recurring task" }
// Open drawer and verify selected view.
onElement { contentDescriptionAsString() == "Show Calendar List and Settings drawer" }.click()
onElement { contentDescriptionAsString() == "Schedule view, Selected" }
}
}
以下を置き換えます。
- PACKAGE_NAME: ベースライン プロファイルを生成するアプリのパッケージ名。
管理されたリリースを使用して効果を測定する
ベースライン プロファイルは、同梱されている APK と密接に結合しており アプリの実行前に組み込まれるため、標準の A/B テストを実行して効果を把握することはできません。ただし、Android カレンダー チームは 管理されたリリースを使用して効果を正確に測定できました。これは、新しいアプリ バージョンをユーザーのサブセットにのみリリースし、以前のリリースと同様のバージョンを使用しているユーザーと比較 する方法です。
ベースライン プロファイルを使用すると、複数の領域で即座に大幅な 改善が見られました。これらの統計は、さまざまなデバイスとすべてのユーザー(スケジュール ビューと月表示で開始するユーザーは最も大きなメリットを得られますが、データベースからカレンダーデータを読み込むなどの共有プロセスの最適化により、他のユーザーもメリットを得られます)で集計されています。
- インタラクティブなアプリの起動時間の中央値(最も一般的なシナリオ)が 775 ミリ秒から 644 ミリ秒に短縮(17%)
- コールド スタート時間の中央値が 1,058 ミリ秒から 901 ミリ秒に短縮(15%)
- ウォーム スタート時間の中央値が 453 ミリ秒から 378 ミリ秒に短縮(17%)
- スケジュール ビューと月表示で、ジャンク フレームレートの中央値が 42 ~ 60% 減少
ベースライン プロファイルと組み合わせてクラウド プロファイルを使用すると、クラウド プロファイルが生成されるため、 最初の 1 週間で改善が若干低下する可能性があります。ただし、ベースライン プロファイルを使用すると、他の 最適化に加えて、パフォーマンスが大幅に向上します。
ツールと機能について詳しくは、次のリソースをご覧ください。
- ベースライン プロファイルについて
- Macrobenchmark ライブラリを使用したベースライン プロファイルのベンチマーク