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 widokach i opartą 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świetlenia i czas 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.
W PokedexStartupBenchmark Compose 1.11 jest o 2, 5% wolniejszy niż widoki w przypadku TTID z uruchomieniem „na zimno”.
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.
W PokedexStartupBenchmark Compose 1.11 jest o 13, 0% wolniejszy niż widoki w przypadku TTFD z uruchomieniem „na zimno”.
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”.
W 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.
Analizy porównawcze bohaterów
Aby sprawdzić wyniki skuteczności i uruchomić testy porównawcze lokalnie:
- Aby sprawdzić kod źródłowy, postępuj zgodnie z przewodnikiem po Androidzie X.
- 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.