Comparer les métriques Compose et View

Jetpack Compose accélère le développement des interfaces utilisateur et améliore le développement pour Android. Toutefois, tenez compte de l'impact de l'ajout de Compose à une application existante sur 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 passe en revue l'impact sur la taille de l'APK et la durée de compilation en examinant l'application exemple Sunflower, une application qui illustre les bonnes pratiques à suivre 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 son APK. Les résultats suivants concernent l'APK de version réduite de chaque projet avec la minification des ressources et du code activée, en mode complet R8, et mesurés à l'aide de l'analyseur d'APK.

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

Lors du premier ajout de Compose à Sunflower, la taille de l'APK est passée de 2 252 Ko à 3 034 Ko, ce qui représente une augmentation de 782 Ko. L'APK généré était composé de la compilation d'UI avec une combinaison de vues et de Compose. Cette augmentation est normale à mesure que des dépendances supplémentaires ont été ajoutées à Sunflower.

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

Durée de la compilation

L'ajout de 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 du débogage de Sunflower:

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

Lors de la première ajout 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 passée à 342 ms, soit une réduction 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 compilation en raison du processus de compilation du code Compose. Toutefois, ces compromis doivent être pesés par rapport aux avantages de Compose, en particulier concernant l'augmentation de la productivité des développeurs lors de l'adoption de Compose. Par exemple, l'équipe du Play Store a constaté que l'écriture d'interface utilisateur nécessite beaucoup moins de code, parfois jusqu'à 50%, ce qui améliore la productivité et la facilité de gestion du code.

Pour consulter d'autres études de cas, consultez Adopter Compose for Teams.

Performances d'exécution

Cette section aborde des sujets liés aux performances d'exécution dans Jetpack Compose afin de comprendre les différences entre Jetpack Compose et les performances du système de vues, et comment 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 à ce sujet, consultez la documentation sur le cycle de vie des composables et les phases de 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 l'interprétation et les étapes 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 propose de nombreuses améliorations par rapport au système de vues. 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 View personnalisé doit implémenter une logique explicite pour empêcher le redessinage lorsque cela 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 modulables 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 ces fonctionnalités au lieu de les exiger par toutes les extensions d'un type View donné.

De plus, Compose fournit des recompositions intelligentes qui reprennent 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 sont très expressifs dans leurs API de mesure et de mise en page, ce qui les rend sujets à 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. Compose peut ainsi 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 économisé 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 savoir comment l'utiliser avec Jetpack Compose, consultez le projet MacrobenchmarkSample.

L'équipe Jetpack Compose utilise également Macrobenchmark pour détecter les régressions potentielles. Par exemple, consultez le benchmark 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 catégorie, il ne bénéficie pas de Zygote, qui précharge les classes et les drawables du kit d'interface utilisateur du système de vues. Jetpack Compose 1.0 utilise l'installation de profil pour les builds de version. Les programmes d'installation de profil permettent aux applications de spécifier le code critique compilé à l'avance 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.