Avantages en termes de performances avec les styles

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.

Phases de Compose et emplacement d'exécution des styles
Figure 1. Phases de Compose et emplacement d'exécution des styles.

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

basic_box_border_change

Bascule la couleur de bordure d'un Box pour mesurer les performances de mise à jour.

-59,91%

-77,22%

input_state_basic_box

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%

basic_box

Mesure la composition et la mise en page initiales d'un Box avec cinq modificateurs chaînés.

-4,78%

-6,60%

basic_text

Affiche cinq composants BasicText avec des chaînes codées en dur.

+0,62%

+2,41%

basic_text_provided_color

Compare la définition de la couleur du texte via un style par rapport à l'utilisation de CompositionLocalProvider.

+5,86%

+9,82%