Optymalizacja sterowana profilami (Profile-Guided Optimization) dla uruchamiania aplikacji na Androidzie
Skróciliśmy czas zimnego startu (cold start) na Androidzie z 1,2 s do 380 ms.
Większość aplikacji podczas pierwszego uruchomienia działa w najwolniejszym trybie kompilacji. Android używa trybu „interpret-only”, gdy użytkownik po raz pierwszy instaluje Twoją aplikację. Powoduje to powolne uruchamianie się aplikacji. System optymalizuje kod dopiero później, w czasie bezczynności.
Możesz to naprawić, stosując trzystopniowy proces (pipeline).
Generowanie Baseline Profiles Baseline Profiles informują system, które klasy należy skompilować w momencie instalacji. Użyj Macrobenchmark, aby tworzyć je w swoim potoku CI. Nasze profile obejmowały 12% metod, ale odpowiadały za 94% czasu uruchamiania.
Włączenie DEX Layout Reordering To tylko jedna linia w pliku Gradle properties. Informuje ona R8, aby pogrupował klasy odpowiedzialne za start w jednym pliku DEX. Zmniejsza to liczbę błędów stronowania (page faults) o 30% do 50%. Gdy klasy znajdują się blisko siebie, system ładuje mniej niepotrzebnych danych z dysku.
Korzystanie z Cloud Profiles Google Play zbiera profile od użytkowników i przesyła je do nowych instalacji. To potęguje zyski prędkości.
Wyniki naszych testów:
- Brak profilu: 1204 ms zimnego startu
- Tylko Baseline Profile: 620 ms zimnego startu
- Baseline + DEX reorder: 445 ms zimnego startu
- Baseline + DEX reorder + Cloud: 380 ms zimnego startu
Ważne wskazówki dotyczące przepływu pracy:
- Generuj profile w CI przy każdym wydaniu. Nieaktualne profile powodują utratę wydajności.
- Regeneruj profile po uruchomieniu R8. R8 zmienia strukturę kodu.
- Używaj trybu kompilacji „Partial” w Macrobenchmark. Tryb „Full” daje zafałszowane wyniki, które nie odzwierciedlają rzeczywistych doświadczeń użytkowników.
- Testuj na różnych wersjach Androida. Zyski wydajności różnią się w zależności od starszych i nowszych poziomów API.
Łącz te warstwy, aby tworzyć szybsze aplikacje.
Źródło: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a