Porównanie z najlepszymi aplikacjami

Wzorce hero to zestaw wzorców obejmujących ogólne ścieżki użytkowników aplikacji, takie jak uruchamianie aplikacji czy przewijanie w aplikacji Pokedex o otwartym kodzie źródłowym.

  • Testy porównawcze dotyczące uruchamiania aplikacji: śledzenie czasu od otwarcia aplikacji do wyświetlenia treści.
  • Wartości referencyjne dotyczące przewijania elementu hero: pomiar skuteczności przewijania leniwej siatki z obrazami.

Konfiguracja testu

  • Wybór aplikacji: testy przeprowadziliśmy na aplikacji open source Pokedex, porównując jej wersje opartą na widokachopartą na Compose. Aplikacja została wybrana, aby odzwierciedlać rzeczywiste scenariusze, i nie została opracowana przez zespół Compose.
  • Konfiguracja sprzętu: testy porównawcze przeprowadziliśmy na telefonie Pixel 3a z Androidem 12 (API 31) z zablokowanymi procesorami CPU i GPU. To urządzenie jest używane jako standardowy punkt odniesienia wydajności w przypadku najważniejszych testów porównawczych.
  • Konfiguracja kompilacji: testy porównawcze wykorzystują aplikację skompilowaną w trybie wydania z włączonym R8. Aplikacja jest w pełni wstępnie skompilowana, co zmniejsza niestabilność wynikającą z kompilacji just-in-time (JIT).
  • Wybór wyników: aby zapewnić analizę w najgorszym przypadku, z wyników testów porównawczych wykluczono skrajne wartości odstające i niereprezentatywne szumy. Następnie ustalono wartość bazową, wybierając wartości mediany danych o skuteczności w górnym zakresie.

Wskaźniki startupów

Do pomiaru czasu uruchamiania użyliśmy PokedexStartupBenchmark. PokedexStartupBenchmark mierzy czas, po którym aplikacja Pokedex staje się widoczna dla użytkownika.

Uruchomienie aplikacji może odbywać się w 3 stanach: uruchomienie „na zimno”, uruchamianie częściowo z pamięci lub uruchamianie z pamięci. Każdy stan wpływa na to, jak długo aplikacja będzie widoczna dla użytkownika. W przypadku uruchomienia „na zimno” aplikacja jest uruchamiana od zera. W tym teście porównawczym mierzymy wydajność uruchamiania aplikacji w stanie uruchomienia „na zimno”. Zalecamy zawsze optymalizowanie aplikacji pod kątem uruchomienia „na zimno”. Może to również poprawić wydajność uruchamiania „na ciepło” i „na gorąco”.

Do pomiaru czasu uruchamiania aplikacji używamy danych czas do początkowego wyświetleniaczas do pełnego wyświetlenia.

Czas do początkowego wyświetlenia

Czas do pierwszego wyświetlenia (TTID) to czas, jaki upływa od uruchomienia aplikacji do wyświetlenia pierwszej klatki. Obejmuje on inicjowanie procesu podczas uruchomienia „na zimno”, tworzenie aktywności podczas uruchomienia „na zimno” lub uruchamiania częściowo z pamięci oraz wyświetlanie pierwszej klatki.

PokedexStartupBenchmark Compose 1.11 jest o 2, 5% wolniejszy niż widoki w przypadku TTID z uruchomieniem „na zimno”.

W przypadku TTID Compose 1.11 jest o 2,5% wolniejszy niż Views.
Ilustracja 1. Porównanie Compose 1.11 z widokami dla TTID.

Czas do pełnego wyświetlenia

Czas do pełnego wyświetlenia (TTFD) to czas, po którym aplikacja staje się interaktywna. Oznacza to, że wszystkie dane zostały wczytane i wyświetlone. Więcej informacji o czasie potrzebnym na pełne wyświetlenie znajdziesz w artykule Czas uruchamiania aplikacji.

PokedexStartupBenchmark Compose 1.11 jest o 13, 0% wolniejszy niż widoki w przypadku TTFD z uruchomieniem „na zimno”.

Compose 1.11 jest o 13,0% wolniejszy niż Views w przypadku TTFD.
Ilustracja 2. Porównanie Compose 1.11 z widokami w przypadku TTFD.

Analizy porównawcze dotyczące przewijania sekcji hero

Do pomiaru wydajności przewijania użyliśmy PokedexScrollBenchmark. Mierzy wydajność przewijania ekranu aplikacji Pokedex w przypadku leniwej siatki z obrazami. W tym teście porównawczym cała zawartość ekranu jest wielokrotnie przewijana i przesuwana, a następnie wczytywane są nowe elementy. Skuteczność przewijania jest mierzona za pomocą wskaźnika zacięć.

Jank rate

Urządzenia z Androidem renderują obraz z szybkością do 60 lub 120 klatek na sekundę. Oznacza to, że system ma ścisły termin (np.16,6 ms w przypadku 60 klatek na sekundę) na wygenerowanie klatki. Jeśli aplikacja zbyt długo wykonuje swoje zadanie, może to spowodować widoczne zacięcie, które nazywamy „jank”.

PokedexScrollBenchmark zarówno Compose, jak i Widoki osiągają taką samą skuteczność, czyli 0,21% zacięć, od wersji Compose 1.9.0. W ujęciu bezwzględnym 1 z 485 klatek był niestabilny.

Te testy porównawcze pokazują, że Compose w wersji 1.9 i nowszych osiąga podobną skuteczność jak Widoki w zakresie zacinania się podczas przewijania.

Od wersji 1.9.0 biblioteki Compose i widoki mają taki sam współczynnik zacięć.
Od wersji 1.9.0 Compose i Widoki mają taki sam współczynnik zacięć.

Analizy porównawcze bohaterów

Aby sprawdzić wyniki skuteczności i uruchomić testy porównawcze lokalnie:

  1. Aby sprawdzić kod źródłowy, postępuj zgodnie z przewodnikiem po Androidzie X.
  2. Postępuj zgodnie z instrukcjami w kodzie źródłowym testów porównawczych Hero.

Te testy porównawcze możesz przeprowadzać na dowolnym obsługiwanym urządzeniu, np. na konkretnym urządzeniu, pod kątem którego optymalizujesz aplikację. Aby jednak sprawdzić oficjalne wyniki, użyj tego samego sprzętu.