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).

  1. 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.

  2. 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.

  3. 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:

Ważne wskazówki dotyczące przepływu pracy:

Łącz te warstwy, aby tworzyć szybsze aplikacje.

Źródło: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a