Vantaggi in termini di prestazioni con gli stili

Per progettazione, gli stili operano nella fase di layout e disegno di Compose. In questo modo si evita la necessità di creare modificatori basati su lambda, poiché gli stili saltano sempre la fase di composizione.

Fasi di Composizione e dove vengono eseguiti gli stili
Figura 1. Fasi di Composizione e dove vengono eseguiti gli stili.

I miglioramenti del rendimento rispetto ai modificatori derivano da tre ottimizzazioni principali:

  • Spostamento di fase: gli stili spesso hanno come target la fase di disegno. Quando un valore cambia, Compose invalida solo la fase interessata (ad es. Redraw) anziché attivare una ricomposizione o un nuovo layout completo.
  • Allocazione differita: gli stili rimandano l'allocazione delle risorse di animazione fino all'inizio effettivo di un'animazione. In questo modo si riduce il lavoro necessario durante la composizione iniziale.
  • Overhead ridotto degli oggetti: i modificatori concatenati allocano un oggetto per ogni proprietà (ad es. spaziatura interna, bordo). Gli stili utilizzano una singola funzione lambda per applicare più proprietà, riducendo significativamente le allocazioni di memoria. Se uno stile è definito in un tema, questa espressione lambda viene condivisa tra tutti i componenti che utilizzano il tema.

La tabella seguente mostra i risultati illustrativi di benchmark delle prestazioni interni per Compose 1.11.0-alpha06 di Styles, rispetto a un'implementazione in Compose senza Styles.

Il test basic_box_border_change evidenzia la forza del sistema di stili nell'evitare l'allocazione di più oggetti modificatori durante gli aggiornamenti delle proprietà, con una riduzione massiccia di circa il 77% delle allocazioni e di circa il 59% del tempo.

Metodo di test

Descrizione

Variazione di orario

Modifica dell'allocazione

basic_box_border_change

Attiva/disattiva il colore del bordo di un Box per misurare il rendimento degli aggiornamenti.

-59,91%

-77,22%

input_state_basic_box

Confronta gli stati di passaggio del mouse/selezione/pressione basati sullo stile con la raccolta manuale degli stati di interazione.

-5,24%

-14,72%

basic_box

Misura la composizione e il layout iniziali di un Box con cinque modificatori concatenati.

-4,78%

-6,60%

basic_text

Visualizza cinque componenti BasicText con stringhe codificate.

+0,62%

+2,41%

basic_text_provided_color

Confronta l'impostazione del colore del testo tramite uno stile rispetto all'utilizzo di CompositionLocalProvider.

+5,86%

+9,82%