Comparer les métriques Compose et View

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

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 la compilation en examinant les Application exemple Sunflower : application qui illustre les bonnes pratiques avec la migration d'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, contenant des ressources et du code minification activée, en mode complet de R8, et mesurée à 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 : une augmentation de 782 Ko. L'APK généré se composait du build de l'UI avec une combinaison de vues et de Compose. Cette augmentation doit être due à les dépendances ont été ajoutées à Sunflower.

À l'inverse, lors de la migration de Sunflower vers une application Compose uniquement, la taille de l'APK est passé de 3 034 Ko à 2 966 Ko, soit une réduction de 68 Ko. Cette diminution était 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 en tant que compilateur Compose traite les composables de votre application. Les résultats suivants ont été obtenus en utilisant un outil gradle-profiler autonome, qui exécute une compilation plusieurs fois. qu'une durée moyenne de compilation peut être obtenue pour la durée de compilation de débogage Tournesol:

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 de Compose à Sunflower, la durée moyenne de compilation est passée de 299 à 399 ms, soit une augmentation de 100 ms. Cette durée est due au compilateur Compose exécuter 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, La migration de Sunflower vers Compose est terminée. Cette réduction peut être attribuée à plusieurs facteurs qui réduisent collectivement la durée de compilation, comme la suppression de données. la liaison, la migration des dépendances qui utilisent kapt vers KSP et la mise à jour plusieurs dépendances à leurs dernières versions.

Résumé

En adoptant Compose, vous augmenterez efficacement la taille de l'APK de votre application, augmenter les performances de durée de compilation de votre application en raison du processus de compilation ; du code Compose. Toutefois, ces compromis doivent être pris en compte avantages de Compose, en particulier concernant l'augmentation de la productivité des développeurs. lors de l'adoption de Compose. Par exemple, l'équipe Play Store a trouvé que l'écriture d'une UI nécessite beaucoup moins de code, parfois jusqu'à 50%, et donc pour améliorer la productivité et la 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 : comprendre les différences entre Jetpack Compose et les performances du système View ; et comment les mesurer.

Recompositions intelligentes

Lorsque certaines parties de l'interface utilisateur ne sont pas valides, Compose tente de recomposer uniquement les éléments parties qui doivent être mises à jour. Pour en savoir plus, consultez le cycle de vie composables et Jetpack Compose les différentes phases.

Profils de référence

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

La bibliothèque Jetpack Compose inclut son propre profil de référence et vous obtiennent 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 d'ajouter un profil de référence à votre 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écrits 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 d'View personnalisé doit d'implémenter une logique explicite pour empêcher la redessination lorsqu'elle n'est pas nécessaire, par exemple en cas de traitement répétitif des données.

Jetpack Compose résout ce problème de différentes manières. Compose ne contient pas de texte des objets 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 façon rejouable. Cela vous aide réduire le suivi de l'état explicite, les allocations de mémoire et les rappels uniquement les composables qui nécessitent lesdites caractéristiques au lieu de les exiger extensions d'un type View donné.

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

Plusieurs passes de mise en page

Les ViewGroups traditionnels ont beaucoup d'expressivité dans leurs mesures et leur mise en page. API qui les rendent 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. Compose peut ainsi être efficace pour gérer les arborescences d'UI profondes. Si plusieurs mesures sont nécessaires, Compose dispose 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 écrite en Kotlin et compilée 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 classe Bibliothèque Jetpack Macrobenchmark. Pour savoir comment pour l'utiliser avec Jetpack Compose, consultez la Projet MacrobenchmarkSample.

L'équipe Jetpack Compose utilise également Macrobenchmark pour détecter les régressions peut se produire. 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 données du système View Classes et drawables de l'UI Toolkit Jetpack Compose 1.0 utilise le profil l'installation des builds de version. Les programmes d'installation de profils permettent aux applications de spécifier du code critique pour être 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.