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.
I miglioramenti del rendimento rispetto ai modificatori derivano da tre ottimizzazioni principali:
- Spostamento di fase: gli stili spesso hanno come target la fase di pareggio. Quando un valore cambia, Compose invalida solo la fase interessata (ad es. Redraw) anziché attivare una ricomposizione o un nuovo layout completo.
- Allocazione lazy: 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, la lambda viene condivisa tra tutti i componenti che utilizzano il tema.
La tabella seguente mostra i risultati illustrativi dei 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 conseguente riduzione massiccia delle allocazioni di circa il 77% e del tempo di circa il 59%.
Metodo di test |
Descrizione |
Variazione di orario |
Modifica dell'allocazione |
Attiva/disattiva il colore del bordo di un |
-59,91% |
-77,22% |
|
Confronta gli stati di passaggio del mouse/selezione/pressione basati sullo stile con la raccolta manuale degli stati di interazione. |
-5,24% |
-14,72% |
|
Misura la composizione e il layout iniziali di un |
-4,78% |
-6,60% |
|
Esegue il rendering di cinque componenti |
+0,62% |
+2,41% |
|
Confronta l'impostazione del colore del testo tramite uno stile rispetto all'utilizzo di |
+5,86% |
+9,82% |