Comparer les métriques Compose et View

Jetpack Compose accélère le développement d'interfaces utilisateur et améliore le développement Android. Toutefois, tenez compte de la manière dont l'ajout de Compose à une application existante peut affecter des métriques telles que la taille de l'APK, la compilation et les performances d'exécution d'une application.

Taille de l'APK et durées de la compilation

Cette section explique l'impact sur la taille de l'APK et la durée de compilation en examinant l'application exemple Sunflower, qui présente les bonnes pratiques pour migrer une application basée sur les vues vers Compose.

Taille de l'APK

L'ajout de bibliothèques à votre projet augmente la taille de l'APK. Les résultats suivants concernent l'APK en version réduite de chaque projet avec la minification des ressources et du code activée, en mode complet R8 et mesuré à l'aide de l'analyseur d'APK.

Vues uniquement Vues mixtes et Compose Compose uniquement
Taille de téléchargement 2 252 Ko 3 034 Ko 2 966 Ko

Lors de l'ajout de Compose à Sunflower, la taille de l'APK est passée de 2 252 Ko à 3 034 Ko, soit une augmentation de 782 Ko. L'APK généré se composait du build de l'interface utilisateur, avec un mélange de vues et de Compose. Cette augmentation est normale, car des dépendances supplémentaires ont été ajoutées à Sunflower.

À l'inverse, lorsque Sunflower a été migré vers une application réservée à Compose, la taille de l'APK est passée de 3 034 Ko à 2 966 Ko, soit une réduction de 68 Ko. Cette diminution est due à la suppression des dépendances de View inutilisées, telles que AppCompat et ConstraintLayout.

Durée de la compilation

Ajouter Compose augmente la durée de compilation de votre application à mesure que le compilateur Compose traite les composables de votre application. Les résultats suivants ont été obtenus à l'aide de l'outil autonome gradle-profiler, qui exécute une compilation plusieurs fois afin d'obtenir une durée de compilation moyenne pour la durée de compilation de débogage de Sunflower:

gradle-profiler --benchmark --project-dir . :app:assembleDebug
Vues uniquement Vues mixtes et Compose Compose uniquement
Durée moyenne de compilation 299,47 ms 399,09 ms 342,16 ms

Lors de l'ajout initial de Compose à Sunflower, la durée de compilation moyenne est passée de 299 ms à 399 ms, soit une augmentation de 100 ms. Cette durée est due au fait que le compilateur Compose effectue des tâches supplémentaires pour transformer le code Compose défini dans le projet.

À l'inverse, la durée moyenne de compilation est tombée à 342 ms, soit une diminution de 57 ms, une fois la migration de Sunflower vers Compose terminée. Cette réduction peut être attribuée à plusieurs facteurs qui réduisent collectivement la durée de compilation, tels que la suppression de la liaison de données, la migration des dépendances qui utilisent kapt vers KSP et la mise à jour de plusieurs dépendances vers leurs dernières versions.

Résumé

L'adoption de Compose augmentera efficacement la taille de l'APK de votre application et augmentera les performances de temps de compilation de votre application en raison du processus de compilation du code Compose. Toutefois, ces compromis doivent être comparés aux avantages de Compose, en particulier en ce qui concerne l'augmentation de la productivité des développeurs lors de l'adoption de Compose. Par exemple, l'équipe Play Store a constaté que l'écriture d'une UI nécessite beaucoup moins de code, parfois jusqu'à 50%, ce qui améliore la productivité et la facilité de gestion du code.

Pour découvrir d'autres études de cas, consultez Adopter Compose pour les équipes.

Performances d'exécution

Cette section aborde des sujets liés aux performances d'exécution dans Jetpack Compose pour vous aider à comparer Jetpack Compose aux performances du système de vues et à les mesurer.

Recompositions intelligentes

Lorsque certaines parties de l'interface utilisateur ne sont pas valides, Compose tente de recomposer uniquement les portions à mettre à jour. Pour en savoir plus, consultez la documentation Cycle de vie des composables et Phases Jetpack Compose.

Profils de référence

Les profils de référence sont un excellent moyen d'accélérer les parcours utilisateur courants. L'inclusion d'un profil de référence dans votre application peut améliorer la vitesse d'exécution du code d'environ 30% dès le premier lancement en évitant les étapes d'interprétation et de compilation juste à temps (JIT) pour les chemins de code inclus.

La bibliothèque Jetpack Compose inclut son propre profil de référence et vous obtenez automatiquement ces optimisations lorsque vous utilisez Compose dans votre application. Toutefois, ces optimisations n'affectent que les chemins de code dans la bibliothèque Compose. Nous vous recommandons donc d'ajouter un profil de référence à votre application pour couvrir les chemins de code en dehors de Compose.

Comparaison avec le système View

Jetpack Compose offre de nombreuses améliorations par rapport au système View. Ces améliorations sont décrites dans les sections suivantes.

Tout étend la vue

Chaque View qui s'affiche à l'écran, comme TextView, Button ou ImageView, nécessite l'allocation de mémoire, un suivi d'état explicite et plusieurs rappels pour couvrir tous les cas d'utilisation. De plus, le propriétaire du View personnalisé doit implémenter une logique explicite pour empêcher une redessination lorsque ce n'est pas nécessaire, par exemple pour le traitement répétitif des données.

Jetpack Compose résout ce problème de différentes manières. Compose ne dispose pas d'objets explicites pouvant être mis à jour pour dessiner des vues. Les éléments d'interface utilisateur sont des fonctions composables simples dont les informations sont écrites dans la composition de manière rejouable. Cela permet de réduire le suivi de l'état explicite, les allocations de mémoire et les rappels uniquement pour les composables qui nécessitent lesdites fonctionnalités, au lieu de les exiger par toutes les extensions d'un type View donné.

De plus, Compose propose des recompositions intelligentes, qui relancent le résultat précédemment dessiné si vous n'avez pas besoin d'apporter de modifications.

Plusieurs passes de mise en page

Les ViewGroups traditionnels présentent une grande expressivité dans leurs API de mesure et de mise en page, ce qui les rend vulnérables à plusieurs passes de mise en page. Ces différentes passes de mise à page peuvent demander beaucoup de travail si elles sont effectuées à des points imbriqués spécifiques dans la hiérarchie des vues.

Jetpack Compose applique une seule passe de mise en page pour tous les composables de mise en page via son contrat d'API. Cela permet à Compose de gérer efficacement les arborescences profondes. Si plusieurs mesures sont nécessaires, Compose dispose de mesures intrinsèques.

Afficher les performances de démarrage

Le système View doit gonfler les mises en page XML lorsqu'une mise en page spécifique s'affiche pour la première fois. Ce coût est enregistré dans Jetpack Compose, car les mises en page sont écrites en Kotlin et compilées comme le reste de votre application.

Analyse comparative de Compose

Dans Jetpack Compose 1.0, les performances d'une application entre les modes debug et release présentent des différences importantes. Pour obtenir des délais représentatifs, utilisez toujours la compilation release au lieu de debug lors du profilage de votre application.

Pour vérifier les performances de votre code Jetpack Compose, vous pouvez utiliser la bibliothèque Jetpack Macrobenchmark. Pour découvrir comment l'utiliser avec Jetpack Compose, consultez le projet MacrobenchmarkSample.

L'équipe Jetpack Compose utilise également Macrobenchmark pour détecter les régressions possibles. Par exemple, consultez l'analyse comparative de la colonne différée et son tableau de bord pour suivre les régressions.

Installation de profil dans Compose

Comme Jetpack Compose est une bibliothèque sans bundle, il ne bénéficie pas de Zygote, qui précharge les classes et les drawables du kit UI du système de vues. Jetpack Compose 1.0 utilise l'installation de profils pour les builds de version. Les programmes d'installation de profil permettent aux applications de spécifier le code critique à compiler à l'avance (AOT) au moment de l'installation. Compose intègre des règles d'installation de profil qui réduisent la durée de démarrage et les à-coups dans les applications Compose.