Jetpack Compose のパフォーマンス

Jetpack Compose は、初期設定の状態で優れたパフォーマンスを実現します。ベスト プラクティスに沿ってアプリを構成し、よくある落とし穴を回避して、Compose アプリケーションのパフォーマンスを最適化します。

Jetpack Compose のベンチマーク

Views と比較して Jetpack Compose のパフォーマンスを検証するために、ヒーロー ベンチマークを使用します。これは、アプリのコールド スタートや、画像を含むリストやグリッドのスクロールなど、重要な実際のユーザー ジャーニーに焦点を当てたベンチマークです。これらのベンチマークは、オープンソースの Pokedex アプリを使用して実施し、ビューと Compose の実装を比較しています。

これらのベンチマークは、Compose 1.9.0 以降、スクロール中のジャンクに関して Compose が View のパフォーマンスに匹敵することを示しています(Google Pixel 6 でジャンク 0% を達成)。

Compose バージョン別の、ビューに対する Compose の過剰なジャンクの割合(低いほど良い)
Compose のバージョンデバイスビューあたりの過剰なジャンク(pp)
1.3.3Pixel 3a+0.35
1.4.3Pixel 3a+0.41
1.5.4Pixel 3a+0.42
1.6.8Pixel 3a+0.21
1.7.8Pixel 3a+0.36
1.8.0Pixel 3a+0.38
1.9.0Pixel 3a0
1.10.0Pixel 3a0
1.11Google Pixel 60
1.12Google Pixel 60
図 1. Compose 1.9.0 以降、Compose はビューのスクロール ジャンクと一致します。

その他の指標と Google の手法については、ヒーロー ベンチマークをご覧ください。

主なコンセプト

Compose のパフォーマンスに関する主なコンセプトをいくつか紹介します。

  • フェーズ: コンポジション、レイアウト、描画のフェーズを理解することは、Compose が UI を更新する方法を最適化するうえで重要です。
  • ベースライン プロファイル: 重要なコードをプリコンパイルすることで、アプリの起動を高速化し、インタラクションをスムーズにします。
  • 安定性: Compose が再コンポーズ中にパラメータを比較する方法を理解することで、コストのかかる等価性チェックを導入することなく、不要な作業をスキップできます。

アプリを適切に構成する

アプリのパフォーマンスが低い場合は、構成に問題があることが考えられます。最初のステップとして、次の構成オプションを確認することをおすすめします。

  • R8 を使用してリリースモードでビルドする: リリースモードでアプリを実行してみてください。デバッグモードは多くの問題を見つけるために役立ちますが、パフォーマンスにコストがかかるため、他の問題を特定することが困難になる場合があります。また、R8 コンパイラで最適化と圧縮を有効にして、パフォーマンスと効率に優れたリリースビルドを作成する必要があります。
  • ベースライン プロファイルを使用する: ベースライン プロファイルは、クリティカル ユーザー ジャーニーのコードをプリコンパイルすることで、パフォーマンスを向上させます。Compose にはデフォルトのプロファイルが含まれていますが、アプリ固有のプロファイルも作成することをおすすめします。ベースライン プロファイルの詳細については、Android のパフォーマンスに関する一般的なドキュメントをご覧ください

ツール

Compose アプリのパフォーマンスの測定と分析に役立つ一連のツールについて理解します。

ベスト プラクティス

Compose を使用してアプリを開発する際は、以下のベスト プラクティスを念頭に置いてください。

詳しくは、ベスト プラクティス ガイドをご覧ください。

視聴回数

Compose ではなくビューを使用している場合は、専用のレイアウトのパフォーマンスを改善するガイドをご覧ください。

参考情報