Korzyści związane z wydajnością dzięki stylom

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.

Fazy Compose i miejsca, w których działają style
Rysunek 1. Etapy tworzenia i miejsca, w których działają style.

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

basic_box_border_change

Przełącza kolor obramowania elementu Box, aby mierzyć skuteczność aktualizacji.

-59,91%

-77,22%

input_state_basic_box

Porównuje stany najechane/skupione/naciśnięte oparte na stylu ze stanami zebranymi ręcznie.

-5,24%

-14,72%

basic_box

Mierzy początkową kompozycję i układ elementu Box z 5 połączonymi modyfikatorami.

-4,78%

-6,60%

basic_text

Renderuje 5 komponentów BasicText z zakodowanymi na stałe ciągami znaków.

+0,62%

+2,41%

basic_text_provided_color

Porównuje ustawianie koloru tekstu za pomocą stylu i za pomocą CompositionLocalProvider.

+5,86%

+9,82%