Par conception, les styles fonctionnent dans la phase de mise en page et de dessin de Compose. Cela évite d'avoir à créer des modificateurs basés sur des expressions lambda, car les styles ignorent toujours la phase de composition.
Les améliorations des performances par rapport aux modificateurs proviennent de trois optimisations principales :
- Décalage de phase : les styles ciblent souvent la phase de dessin. Lorsqu'une valeur change, Compose n'invalide que la phase concernée (par exemple, le redessin) au lieu de déclencher une recomposition ou une nouvelle mise en page complète.
- Allocation différée : les styles diffèrent l'allocation des ressources d'animation jusqu'au démarrage effectif d'une animation. Cela réduit le travail requis lors de la composition initiale.
- Réduction de la surcharge des objets : les modificateurs chaînés allouent un objet pour chaque propriété (par exemple, la marge intérieure, la bordure). Les styles utilisent une seule expression lambda pour appliquer plusieurs propriétés, ce qui réduit considérablement les allocations de mémoire. Si un style est défini dans un thème, cette expression lambda est partagée entre tous les composants utilisant ce thème.
Le tableau suivant présente des résultats illustratifs d'analyses comparatives internes des performances pour Compose 1.11.0-alpha06 des styles, par rapport à une implémentation dans Compose sans styles.
Le test basic_box_border_change met en évidence la capacité du système de style à éviter l'allocation de plusieurs objets modificateurs lors des mises à jour de propriétés, ce qui entraîne une réduction massive d'environ 77% des allocations et d'environ 59% du temps.
Méthode de test |
Description |
Évolution du temps |
Évolution de l'allocation |
Bascule la couleur de bordure d'un |
-59,91% |
-77,22% |
|
Compare les états de pointage/focus/appui basés sur le style par rapport à la collecte manuelle de l'état d'interaction. |
-5,24% |
-14,72% |
|
Mesure la composition et la mise en page initiales d'un |
-4,78% |
-6,60% |
|
Affiche cinq composants |
+0,62% |
+2,41% |
|
Compare la définition de la couleur du texte via un style par rapport à l'utilisation de |
+5,86% |
+9,82% |