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 Compose e dove vengono eseguiti gli stili.

I miglioramenti delle prestazioni 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. ridisegno) anziché attivare una ricomposizione o un nuovo layout completo.
  • Allocazione lazy: gli stili rimandano l'allocazione delle risorse di animazione fino all'avvio effettivo di un' animazione. In questo modo si riduce il lavoro richiesto durante la composizione iniziale.
  • Riduzione dell'overhead degli oggetti: i modificatori concatenati allocano un oggetto per ogni proprietà (ad es. spaziatura interna, bordo). Gli stili utilizzano una singola lambda per applicare più proprietà, riducendo significativamente le allocazioni di memoria. Se uno stile è definito in un tema, la lambda viene condivisa tra tutti i componenti che utilizzano quel tema.

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

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

Modifica dell'ora

Modifica dell'allocazione

basic_box_border_change

Attiva/disattiva il colore del bordo di un Box per misurare le prestazioni di aggiornamento.

-59,91%

-77,22%

input_state_basic_box

Confronta gli stati di passaggio del mouse/focus/pressione basati sullo stile con la raccolta manuale dello stato 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

Esegue il rendering di cinque componenti BasicText con stringhe hardcoded.

+0,62%

+2,41%

basic_text_provided_color

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

+5,86%

+9,82%