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