Phases et performances de Compose

Lorsque Compose met à jour un frame, il passe par trois phases:

  • Composition:Compose détermine ce qui doit être affiché. Il exécute des fonctions modulables et crée 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 les éléments individuels 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 de l'UI n'est ajouté ni supprimé, Compose peut ignorer les phases de composition et de mise en page et redessiner cet élément.

Cependant, en raison d'erreurs de codage, Compose peut avoir du mal à identifier les phases qu'il peut ignorer en toute sécurité. Dans ce cas, Compose exécute les trois phases, ce qui peut ralentir votre interface utilisateur. Ainsi, de nombreuses bonnes pratiques en matière de performances visent à aider Compose à ignorer les phases qu'il n'a pas besoin de suivre.

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

Principes généraux

Vous devez suivre deux grands principes qui peuvent améliorer les performances en général:

  • Dans la mesure du possible, retirez les calculs de vos fonctions composables. Vous devrez peut-être réexécuter les fonctions modulables chaque fois que l'UI change. Tout code que vous placez dans le composable est réexécuté, potentiellement pour chaque frame d'une animation. Limitez le code du composable à ce dont il a 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 complètement la phase de composition. Pour ce faire, vous pouvez transmettre des fonctions lambda au lieu de la valeur d'état pour un état changeant fréquemment, et privilégier les modificateurs basés sur lambda lorsque vous passez dans un état changeant fréquemment. Vous trouverez un exemple de cette technique dans la section Reporter les lectures le plus longtemps possible de Suivre les bonnes pratiques.

Autres ressources