Profielgestuurde optimalisatie voor Android-app-opstart
We hebben onze Android cold start verkort van 1,2s naar 380ms.
De meeste apps draaien tijdens de eerste lancering in de langzaamste compilatiemodus. Android gebruikt de "interpret-only"-modus wanneer een gebruiker je app voor het eerst installeert. Dit maakt je opstarttijd traag. Het systeem optimaliseert code pas later tijdens inactiviteit.
Je kunt dit oplossen met een driestaps-pipeline.
Genereer Baseline Profiles Baseline Profiles vertellen het systeem welke classes tijdens de installatie moeten worden gecompileerd. Gebruik Macrobenchmark om deze in je CI-pipeline te maken. Onze profielen besloegen 12% van de methoden, maar waren verantwoordelijk voor 94% van de opstarttijd.
Schakel DEX Layout Reordering in Dit is één regel in je Gradle-properties. Het vertelt R8 om startup-classes te groeperen in je DEX-bestand. Dit vermindert page faults met 30% tot 50%. Wanneer classes bij elkaar blijven, laadt het systeem minder nutteloze gegevens van de schijf.
Gebruik Cloud Profiles Google Play verzamelt profielen van gebruikers en stuurt deze naar nieuwe installaties. Dit versterkt je snelheidswinst.
De resultaten van ons testen:
- Geen profiel: 1.204 ms cold start
- Alleen Baseline Profile: 620 ms cold start
- Baseline + DEX reorder: 445 ms cold start
- Baseline + DEX reorder + Cloud: 380 ms cold start
Belangrijke tips voor je workflow:
- Genereer profielen in CI voor elke release. Verouderde profielen veroorzaken prestatieverlies.
- Regenereer profielen nadat R8 is uitgevoerd. R8 verandert de structuur van je code.
- Gebruik de "Partial" compilatiemodus in Macrobenchmark. De "Full"-modus geeft valse resultaten die de echte gebruikerservaring niet weerspiegelen.
- Test op verschillende Android-versies. De prestatiewinst varieert tussen oudere en nieuwere API-niveaus.
Stapel deze lagen op elkaar om snellere apps te bouwen.
Bron: https://dev.to/software_mvp-factory/profile-guided-optimization-for-android-app-startup-2i7a