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