Optimera starttiden med baslinjeprofiler

  • Baslinjeprofiler eliminerar beroendet av JIT-kompilering vid den första utgÃ¥van med AOT.
  • De tillÃ¥ter förkompilering av kritiska kodsökvägar för att minska starttiden och förbättra rullningsjämnheten.
  • De är integrerade via en Macrobenchmark-modul som automatiserar genereringen av profiler baserat pÃ¥ faktisk användning.
  • Dess implementering pÃ¥verkar direkt användarlojaliteten genom att erbjuda en omedelbar upplevelse frÃ¥n minut ett.

Optimera starttiden med baslinjeprofiler

Idag har ingen tålamod att vänta på att en app ska laddas. I det mobila ekosystemet är responsivitet skillnaden mellan att en användare stannar kvar i appen eller tar bort den inom några sekunder. Att få ett komplext gränssnitt att laddas direkt kräver att man går utöver konventionell kodoptimering och fokuserar på hur enheten bearbetar instruktioner innan de når skärmen.

För att hantera uppstartsförseningar har Google introducerat Baseline Profiles , ett omvälvande verktyg som låter utvecklare markera vilka kodsökvägar som är viktiga. Genom att göra detta förhindrar vi att enheten behöver "upptäcka" hur appen ska köras första gången, vilket ger smidig prestanda från allra första starten , oavsett om det är en ren installation eller en uppdatering.

Vad exakt är baslinjeprofiler och hur fungerar de?

För att förstå dem behöver du först veta att Android använder Android Runtime (ART). Traditionellt har kod exekverats med hjälp av Just-In-Time (JIT)-kompilering , vilket översätter koden medan appen körs, eller Ahead-Of-Time (AOT)-kompilering , vilket gör allt i förväg. Problemet med JIT är att det kan orsaka mindre hack eller initial långsamhet eftersom koden inte är optimerad från början.

Baslinjeprofiler fungerar som en huvudguide. De är i huvudsak en lista över klasser och metoder som systemet måste förkompilera med hjälp av AOT innan användaren öppnar appen. På så sätt behöver inte körtiden tolka koden i farten, vilket kan resultera i en hastighetsförbättring på upp till 30 % vid initial körning.

Till skillnad från molnprofiler, som är beroende av att tusentals användare använder appen och Google Play lägger till den datan (en process som tar dagar), levereras baslinjeprofiler direkt i Android App Bundle (AAB) . Det betyder att optimering är tillgänglig omedelbart, vilket eliminerar den "tröga" period som nyligen uppdaterade versioner ofta upplever.

När är det viktigt att implementera denna teknik?

Alla applikationer kräver inte samma optimeringsnivå, men det finns scenarier där de är en livräddare. Att använda profiler är avgörande för att minska kallstartstiden , särskilt om din välkomstskärm har stora beroenden eller komplex rendering. Om du märker att den första starten är långsam men den andra är blixtsnabb, har du ett kompileringsproblem som profiler kan lösa.

Dessutom är de inte bara för nybörjare. De är extremt användbara för att förbättra rullningsflyten . Genom att förkompilera listlogik och animationer förhindrar du att bildrutor tappas, vilket gör att innehållsnavigeringen känns otroligt smidig. De är också idealiska för att optimera återkommande funktioner , som utchecknings- eller registreringsflödet, vilket säkerställer att de mest använda sökvägarna är de snabbaste.

Steg-för-steg-konfiguration av genereringsmodulen

Det modernaste sättet att implementera detta är genom en dedikerad modul i Android Studio. För att börja måste du gå till Ny modul och välj mallen BaslinjeprofilgeneratorHär definierar du målapplikationen, modulnamnet (till exempel baselineprofile) och det föredragna språket, antingen Kotlin eller Java.

Den här processen automatiserar skapandet av en testmiljö. Guiden konfigurerar plugin-programmet. androidx.baselineprofile och kommer att lägga till biblioteket profilinstallerare i applikationsmodulen. Den senare ansvarar för att profilen är korrekt installerad på användarnas enheter, även på äldre versioner av Android som inte stöder molnprofiler.

En viktig teknisk detalj är hanteringen av obfuskering. För att profilen ska vara giltig måste den genereras på en variant där `isMinifyEnabled` är satt till `false` . Oroa dig dock inte för den slutliga versionen: R8 kan skriva om profilreglerna så att de matchar den obfuskerade koden i produktions-APK:n, vilket bibehåller maximal säkerhet och storleksoptimering.

Skapande av kritiska användarresor (CUJ)

En grundläggande profil som bara startar appen är användbar, men för att få ut det mesta av dess prestanda måste vi definiera Kritiska användarresorDetta görs inom klassen BaselineProfileGenerator använder regeln BaselineProfileRuleInuti blocket collectVi måste simulera de verkliga handlingar som en användare skulle vidta.

Automatisering av visuell och funktionell regressionstestning
Relaterad artikel:
Komplett guide till automatisering av visuell och funktionell regressionstestning

Om din app till exempel har en asynkron belastning räcker det inte att bara anropa startActivityAndWait()Du måste implementera smarta väntetider så att systemet registrerar koden som körs när innehållet slutligen visas. Detta uppnås genom att interagera med gränssnittet via UiAutomator, letar efter specifika element och väntar på att de ska bli synliga innan testet avslutas.

För ett avancerat arbetsflöde kan du programmera generatorn rulla listor vertikalt med hjälp av metod flingNavigera till detaljerade skärmar eller hantera till och med dialogrutor för systembehörigheter. Ju mer exakt den simulerade genomgången är, desto mer exakt blir den genererade profilen, och därför, Ju smidigare upplevelsen blir faktiska slutanvändaren.

Prestandagenerering och validering

När generatorn är skriven är det dags att köra den. Helst bör du använda en Gradle-hanterad enhet (GMD) eller en emulator med en avbildning aosp att ha root-behörigheter, även om nyare versioner av biblioteket redan tillåter att generera profiler på fysiska enheter med Android 13 eller högre utan komplikationer.

När du kör Gradle-uppgiften :app:generateBaselineProfileSystemet startar appen flera gånger, samlar in de anropade klasserna och metoderna och skapar en fil. baseline-prof.txtDen här filen placeras automatiskt i appens resursmapp, redo att paketeras i AAB.

För att ta reda på om det verkligen fungerade använde vi Jetpack MacrobenchmarkVi skapade ett test som jämför två scenarier: ett med CompilationMode.None() (utan optimering) och en annan med CompilationMode.Partial() (med hjälp av profilen). Vid analys av mätvärdet tidTillFullVisningDet är vanligt att observera drastiska minskningar i millisekunder, vilket validerar att kritisk kod inte längre behöver kompileras i realtid.

I verkliga scenarier, som med storskaliga appar, har det observerats att Just-in-Time (JIT)-tråden går från att vara upptagen 25 % av tiden till bara 3 %. Detta frigör CPU-resurser och minskar enhetens termiska belastning, vilket resulterar i en mer stabil och effektiv app , särskilt på enklare enheter.

Att implementera baslinjeprofiler är en av de mest kostnadseffektiva investeringarna i användarupplevelse, eftersom det gör att programvaran känns lätt och responsiv från första sekunden. Genom att kombinera användningen av benchmarkmoduler för att generera och ständigt validera starttider kan vilken utvecklare som helst omvandla en långsam applikation till ett omedelbart, professionellt verktyg som behåller användarna.


Lägg till som prioriterad källa i Google