Comparer les métriques Compose et View

Jetpack Compose accélère le développement d'UI et améliore le développement 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 de l'application.

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

Cette section examine l'impact sur la taille de l'APK et le temps de compilation en examinant l'application exemple Sunflower, qui illustre les bonnes pratiques à suivre lors de la migration d'une application basée sur les vues vers Compose.

Taille de l'APK

L'ajout de bibliothèques à votre projet augmente sa taille d'APK. Les résultats suivants portent sur l'APK en version réduite de chaque projet dans les conditions suivantes : la réduction des ressources et du code est activée, le mode complet de R8 est utilisé et les mesures sont effectuées à l'aide de l'analyseur d'APK.

Vues uniquement Vues et Compose mélangés 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, soit une augmentation de 782 Ko. L'APK généré consistait en la compilation de l'UI avec un mélange de vues et de Compose. Cette augmentation est prévisible, car des dépendances supplémentaires ont été ajoutées à Sunflower.

À l'inverse, lorsque Sunflower a été migré vers une application Compose uniquement, la taille de l'APK est passée de 3 034 Ko à 2 966 Ko, soit une diminution de 68 Ko. Cette diminution est due à la suppression des dépendances de vue 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, car 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 et Compose mélangés Compose uniquement
Durée moyenne de compilation 299,47 ms 399,09 ms 342,16 ms

Lors du premier ajout de Compose à Sunflower, le temps de compilation moyen est passé 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 de compilation moyenne est passé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 le temps 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 effectivement la taille de l'APK de votre application et augmentera également les performances de compilation de votre application en raison du processus de compilation du code Compose. Toutefois, ces compromis doivent être mis en balance avec les avantages de Compose, en particulier en termes d'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 interface utilisateur nécessite beaucoup moins de code, parfois jusqu'à 50%, ce qui augmente la productivité et la facilité de maintenance du code.

Pour en savoir plus, consultez Adopter Compose pour Teams.

Performances d'exécution

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

Recompositions intelligentes

Lorsque certaines parties de l'interface utilisateur ne sont pas valides, Compose tente de recomposer uniquement les parties à mettre à jour. Pour en savoir plus, 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 bénéficiez automatiquement de ces optimisations lorsque vous utilisez Compose dans votre application. Toutefois, ces optimisations n'affectent que les chemins de code de 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 présente 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 View personnalisé doit implémenter une logique explicite pour empêcher la redéfinition lorsqu'elle 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 comporte pas d'objets explicites pouvant être mis à jour pour l'affichage des vues. Les éléments d'UI 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 pour les composables qui nécessitent les mêmes caractéristiques. Il n'est donc pas nécessaire de les demander avec toutes les extensions d'un type View donné.

De plus, Compose propose des recompositions intelligentes, qui relancent le résultat déjà tracé si aucune modification n'est nécessaire.

Plusieurs passes de mise en page

Les ViewGroups traditionnels ont une forte expressivité 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 d'interface comportant de nombreux niveaux. 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 l'utilise également pour détecter les régressions potentielles. Reportez-vous à l'analyse comparative de la colonne différée et à son tableau de bord pour suivre les régressions.

Installation de profil dans Compose

Étant donné que Jetpack Compose est une bibliothèque sans catégorie, Zygote n'est pas disponible pour précharger les classes et les drawables de l'UI du système View. Jetpack Compose 1.0 utilise l'installation de profil pour les builds de publication. Les programmes d'installation de profil permettent aux applications de spécifier le code essentiel à compiler de manière anticipée lors 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.