Jetpack Compose は、初期設定の状態で優れたパフォーマンスを実現します。ベスト プラクティスを使用してアプリを構成し、よくある落とし穴を回避して Compose アプリケーションのパフォーマンスを最適化します。
Jetpack Compose のベンチマーク
Jetpack Compose のパフォーマンスを View と比較するために、ヒーロー ベンチマーク(アプリのコールド スタートや、画像を含むリストやグリッドのスクロールなど、重要な実際のユーザー ジャーニーに焦点を当てたベンチマーク)を使用します。これらのベンチマークは、オープンソースの Pokedex アプリを使用して実施し、その Views と Compose の実装を比較します。
これらのベンチマークは、Compose 1.9 以降では、スクロール時のジャンクに関する Views のパフォーマンスに匹敵することを示しています。
その他の指標や手法については、ヒーロー ベンチマークをご覧ください。
主なコンセプト
Compose のパフォーマンスに関する主なコンセプトは次のとおりです。
- フェーズ: コンポジション、レイアウト、描画の各フェーズを理解することは、Compose が UI を更新する方法を最適化するうえで重要です。
- ベースライン プロファイル: これらのプロファイルは、重要なコードをプリコンパイルするため、アプリの起動が速くなり、操作がスムーズになります。
- 安定性: アプリの安定性を高め、不要な再コンポーズをより効率的にスキップして、パフォーマンスを改善します。
アプリを適切に構成する
アプリのパフォーマンスが低い場合は、構成に問題があることが考えられます。最初のステップとして、次の構成オプションを確認することをおすすめします。
- R8 を使用してリリースモードでビルドする: リリースモードでアプリを実行してみてください。デバッグモードは多くの問題を見つけるために役立ちますが、パフォーマンスに多大なコストがかかるため、他の問題を特定することが困難になる場合があります。また、R8 コンパイラで最適化と圧縮を有効にして、パフォーマンスが高く効率的なリリースビルドを確保する必要があります。
- ベースライン プロファイルを使用する: ベースライン プロファイルは、クリティカル ユーザー ジャーニーのコードを事前コンパイルすることで、パフォーマンスを向上させます。Compose にはデフォルトのプロファイルが含まれていますが、アプリ固有のプロファイルも作成することをおすすめします。Android のパフォーマンスに関する一般的なドキュメントでベースライン プロファイルの詳細を確認する
ツール
Compose アプリのパフォーマンスの測定と分析に役立つ一連のツールについて理解します。
ベスト プラクティス
Compose でアプリを開発する際は、以下のベスト プラクティスを念頭に置いてください。
- 高コストの計算を回避する:
rememberを使用して、高コストの計算の結果をキャッシュに保存します。 - Lazy レイアウトをサポートする:
keyパラメータを使用して Lazy レイアウトに安定したキーを提供し、不要な再コンポーズを最小限に抑えます。 - 不要な再コンポーズを制限する: 状態が急速に変化しているときに再コンポーズを制限するには、
derivedStateOfを使用します。 - 状態の読み取りを延期する: ラムダ関数でラップすることで、可能な限り長い期間にわたって状態の読み取りを延期します。
- 状態の変更にラムダ修飾子を使用する: 頻繁に変更される状態変数には、
Modifier.offset { ... }などのラムダベースの修飾子を使用します。 - 逆方向書き込みを回避する: コンポーザブルで読み取られた状態には書き込まないでください。
詳しくは、ベスト プラクティス ガイドをご覧ください。
視聴回数
Compose ではなくビューを使用している場合は、専用のレイアウトのパフォーマンスを改善するガイドをご覧ください。
参考情報
- アプリのパフォーマンス ガイド: Android でのパフォーマンスを改善するためのベスト プラクティス、ライブラリ、ツールについて説明します。
- パフォーマンスを検査: アプリのパフォーマンスを検査します。
- ベンチマーク: アプリのパフォーマンスをベンチマークします。
- アプリの起動: アプリの起動を最適化します。
- ベースライン プロファイル: ベースライン プロファイルについて理解します。