Zgodnie z założeniami style działają na etapie układu i rysowania w Compose. Dzięki temu nie musisz tworzyć modyfikatorów opartych na lambdach, ponieważ Styles zawsze pomija fazę kompozycji.
Wzrost skuteczności w porównaniu z modyfikatorami wynika z 3 głównych optymalizacji:
- Przesunięcie fazy: style często są kierowane na fazę rysowania. Gdy wartość się zmieni, Compose unieważnia tylko odpowiednią fazę (np. ponowne rysowanie), zamiast wywoływać pełną rekompozycję lub ponowny układ.
- Alokacja odroczona: style odraczają alokację zasobów animacji do momentu, w którym animacja faktycznie się rozpocznie. Zmniejsza to nakład pracy wymagany podczas początkowego tworzenia kompozycji.
- Zmniejszony narzut na obiekty: modyfikatory połączone w łańcuch przydzielają obiekt do każdej właściwości (np. dopełnienie, obramowanie). Style używają pojedynczej funkcji lambda do stosowania wielu właściwości, co znacznie zmniejsza przydział pamięci. Jeśli styl jest zdefiniowany w motywie, ta lambda jest współdzielona przez wszystkie komponenty korzystające z tego motywu.
W tej tabeli przedstawiono przykładowe wyniki wewnętrznych testów wydajności w przypadku wersji 1.11.0-alpha06 biblioteki Styles w Compose w porównaniu z implementacją w Compose bez biblioteki Styles.
Test basic_box_border_change pokazuje, że system stylów skutecznie unika przydzielania wielu obiektów modyfikatorów podczas aktualizacji właściwości, co skutkuje ogromnym zmniejszeniem liczby przydziałów o ok. 77% i czasu o ok. 59%.
Metoda testu |
Opis |
Zmiana czasu |
Zmiana alokacji |
Przełącza kolor obramowania elementu |
-59,91% |
-77,22% |
|
Porównuje stany najechane/skupione/naciśnięte oparte na stylu ze stanami zebranymi ręcznie. |
-5,24% |
-14,72% |
|
Mierzy początkową kompozycję i układ elementu |
-4,78% |
-6,60% |
|
Renderuje 5 komponentów |
+0,62% |
+2,41% |
|
Porównuje ustawianie koloru tekstu za pomocą stylu i za pomocą |
+5,86% |
+9,82% |