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 un lambda, car Styles ignore toujours la phase de composition.
Les améliorations des performances par rapport aux modificateurs proviennent de trois optimisations principales :
- Déphasage : les styles ciblent souvent la phase de dessin. Lorsqu'une valeur change, Compose n'invalide que la phase concernée (par exemple, Redraw) au lieu de déclencher une recomposition ou une remise en page complète.
- Allocation différée : les styles diffèrent l'allocation des ressources d'animation jusqu'à ce qu'une animation démarre réellement. Cela réduit le travail requis lors de la composition initiale.
- Réduction des frais généraux des objets : les modificateurs chaînés allouent un objet pour chaque propriété (par exemple, la marge intérieure ou la bordure). Les styles utilisent un seul 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, ce lambda est partagé entre tous les composants utilisant ce thème.
Le tableau suivant présente des résultats illustratifs de benchmarks de performances internes pour Compose 1.11.0-alpha06 de Styles, en comparaison avec 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 |
Changement d'heure |
Modification de l'allocation |
Active ou désactive la couleur de la bordure d'un |
-59,91 % |
-77,22 % |
|
Compare les états de style (survol, sélection, appui) à la collecte manuelle des états 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 % |