Phases et performances de Compose

Lorsque Compose met à jour une image, il passe par trois phases :

  • Composition : Compose détermine ce qu'il faut afficher. Il exécute des fonctions modulables et construit l'arborescence de l'interface utilisateur.
  • Mise en page : Compose détermine la taille et l'emplacement de chaque élément dans l'arborescence de l'interface utilisateur.
  • Dessin : Compose affiche individuellement les éléments de l'interface utilisateur.

Compose peut ignorer ces phases de manière intelligente si elles ne sont pas nécessaires. Par exemple, supposons qu'un seul élément graphique bascule entre deux icônes de même taille. Étant donné que cet élément ne change pas de taille et qu'aucun élément de l'arborescence d'UI n'est ajouté ou supprimé, Compose peut ignorer les phases de composition et de mise en page. Il suffit alors de redessiner cet élément unique.

Cependant, les erreurs de codage peuvent empêcher Compose de savoir quelles phases il peut ignorer sans risque. Dans ce cas, Compose exécute les trois phases, ce qui peut ralentir votre interface utilisateur. En matière de performance, il est donc souvent recommandé d'aider Compose à ignorer les phases non nécessaires.

Pour en savoir plus, consultez le guide Phases Jetpack Compose.

Principes généraux

Vous devez suivre deux grands principes qui vous aideront à améliorer les performances :

  • Si possible, retirez les calculs de vos fonctions modulables. Il est possible que les fonctions modulables doivent être réexécutées à chaque modification apportée à l'interface utilisateur. Tout code placé dans le composable sera réexécuté, potentiellement pour chaque image d'une animation. Limitez le code du composable à ce dont il a réellement besoin pour créer l'UI.
  • Différez les lectures d'état le plus longtemps possible. En déplaçant la lecture de l'état vers un composable enfant ou une phase ultérieure, vous pouvez réduire la recomposition ou ignorer entièrement la phase de composition. Pour ce faire, il vous suffit de transmettre des fonctions lambda au lieu de la valeur de l'état pour un état qui change fréquemment, et de privilégier les modificateurs lambda lorsque vous passez à un état changeant fréquemment. Vous trouverez un exemple de cette technique dans la section Reporter les lectures le plus longtemps possible de la page Suivre les bonnes pratiques.

Ressources supplémentaires