Jetpack Compose est une solution prête à l'emploi conçue pour offrir d'excellentes performances. Cette page vous explique comment écrire et configurer votre application pour optimiser les performances, et indique certains modèles à éviter.
Avant de poursuivre votre lecture, vous pouvez vous familiariser avec les concepts fondamentaux de Compose présentés dans la section Raisonnement dans Compose.
Configurer correctement votre application
Si votre application n'est pas performante, cela peut indiquer un problème de configuration. Commencez par vérifier les options de configuration suivantes.
Compiler en mode version et utiliser l'outil R8
Si vous rencontrez des problèmes de performances, essayez d'exécuter votre application en mode publication. Le mode débogage est utile pour détecter de nombreux problèmes, mais il affecte considérablement les performances et peut compliquer la détection d'autres problèmes de code susceptibles de nuire aux performances. Vous devriez également utiliser le compilateur R8 pour supprimer le code inutile de votre application. Par défaut, la compilation en mode publication utilise automatiquement le compilateur R8.
Utiliser un profil de référence
Au lieu d'être intégré à la plate-forme Android, Compose est distribué sous forme de bibliothèque. Ainsi, nous pouvons mettre à jour Compose régulièrement et prendre en charge les anciennes versions d'Android. Cependant, la distribution de Compose en tant que bibliothèque a un coût. Le code de la plate-forme Android est déjà compilé et installé sur l'appareil. Les bibliothèques, en revanche, doivent être chargées au lancement de l'application et interprétées au moment opportun lorsque la fonctionnalité est nécessaire. L'application peut être ralentie au démarrage et à chaque fois qu'elle utilise une fonctionnalité de bibliothèque pour la première fois.
Vous pouvez améliorer les performances en définissant des profils de référence. Ces profils définissent les classes et les méthodes requises lors des points essentiels de l'expérience utilisateur. Ils sont distribués avec l'APK de votre application. Lors de l'installation de l'application, ART compile ce code essentiel à l'avance. Il est donc prêt à l'emploi au lancement de l'application.
Il n'est pas toujours facile de définir un bon profil de référence. C'est pour cette raison qu'il est intégré par défaut à Compose. Vous n'aurez peut-être rien à faire pour en bénéficier. Toutefois, si vous choisissez de définir votre propre profil, vous risquez d'en générer un qui n'améliore pas réellement les performances de votre application. Vous devez tester le profil pour vérifier son utilité. Pour ce faire, nous vous recommandons d'écrire des tests Macrobenchmark pour votre application, puis de vérifier les résultats des tests au fil de leur écriture et des modifications du profil de référence. Pour obtenir un exemple d'écriture de tests Macrobenchmark pour l'interface utilisateur de Compose, consultez l'exemple Macrobenchmark Compose.
Pour en savoir plus sur les effets du mode de publication, sur la version R8 et les profils de référence, consultez l'article de blog Pourquoi devriez-vous toujours tester les performances de Compose en mode publication ?.
Impact des trois phases Compose sur les performances
Comme indiqué dans la section Phases Jetpack Compose, Compose met à jour une image en trois phases :
- Composition : Compose détermine le contenu à 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, certaines erreurs de codage peuvent empêcher Compose de savoir quelles phases il peut ignorer sans risque. En cas de doute, Compose exécute les trois phases, ce qui peut ralentir votre UI. En matière de performance, il est donc souvent recommandé d'aider Compose à ignorer les phases non nécessaires.
Vous devez suivre deux grands principes qui vous aideront à améliorer les performances.
Tout d'abord, 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. Vous devez donc limiter le code du composable à ce dont il a réellement besoin pour créer l'UI.
Ensuite, 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.