Optimizarea timpului de pornire cu profiluri de bază

  • Profilurile de bază elimină dependența de compilarea JIT la prima lansare folosind AOT.
  • Acestea permit precompilarea căilor de cod critice pentru a reduce timpul de pornire și a îmbunătăți fluiditatea derulării.
  • Acestea sunt integrate printr-un modul Macrobenchmark care automatizează generarea de profiluri pe baza utilizării reale.
  • Implementarea sa are un impact direct asupra retenției utilizatorilor, oferind o experiență instantanee încă din primul minut.

Optimizarea timpului de pornire cu profiluri de bază

Astăzi, nimeni nu mai are răbdare să aștepte încărcarea unei aplicații. În ecosistemul mobil, timpul de răspuns este diferența dintre un utilizator care rămâne în aplicație și șterge aplicația în câteva secunde. Încărcarea instantanee a unei interfețe complexe necesită depășirea optimizării convenționale a codului, concentrându-se pe modul în care dispozitivul procesează instrucțiunile înainte ca acestea să ajungă pe ecran.

Pentru a remedia întârzierile la pornire, Google a introdus Baseline Profiles , un instrument inovator care permite dezvoltatorilor să marcheze ce căi de cod sunt vitale. Procedând astfel, împiedicăm dispozitivul să „descopere” cum să ruleze aplicația de prima dată, oferind performanțe fluide încă de la prima lansare , fie că este vorba de o instalare curată sau de o actualizare.

Ce sunt mai exact Profilurile de Bază și cum funcționează?

Pentru a le înțelege, trebuie mai întâi să știi că Android folosește Android Runtime (ART). În mod tradițional, codul a fost executat folosind compilarea Just-In-Time (JIT) , care traduce codul pe măsură ce aplicația rulează, sau compilarea Ahead-Of-Time (AOT) , care face totul în prealabil. Problema cu JIT este că poate cauza mici întreruperi sau lentoarea inițială, deoarece codul nu este optimizat de la început.

Profilurile de bază acționează ca un ghid principal. Acestea sunt, în esență, o listă de clase și metode pe care sistemul trebuie să le precompileze folosind AOT înainte ca utilizatorul să deschidă aplicația. În acest fel, programul de execuție nu trebuie să interpreteze codul din mers, ceea ce poate duce la o îmbunătățire a vitezei de până la 30% la execuția inițială.

Spre deosebire de Cloud Profiles, care se bazează pe mii de utilizatori care utilizează aplicația și pe adăugarea acestor date de către Google Play (un proces care durează zile), Baseline Profiles sunt livrate direct în Android App Bundle (AAB) . Aceasta înseamnă că optimizarea este disponibilă imediat, eliminând perioada „lentă” pe care o experimentează adesea versiunile recent actualizate.

Când este esențial să se implementeze această tehnică?

Nu toate aplicațiile necesită același nivel de optimizare, dar există scenarii în care acestea pot fi o salvare. Utilizarea profilurilor este crucială pentru reducerea timpului de pornire la rece , mai ales dacă ecranul de pornire are dependențe mari sau randare complexă. Dacă observați că prima lansare este lentă, dar a doua este extrem de rapidă, aveți o problemă de compilare pe care profilurile o pot rezolva.

În plus, nu sunt doar pentru pornire. Sunt extrem de utile pentru îmbunătățirea fluidității derulării . Prin precompilarea logicii listelor și a animațiilor, preveniți pierderea de cadre, ceea ce face ca navigarea prin conținut să fie incredibil de fluidă. De asemenea, sunt ideale pentru optimizarea funcțiilor recurente , cum ar fi fluxul de finalizare a comenzii sau de înregistrare, asigurându-se că cele mai frecvent utilizate căi sunt cele mai rapide.

Configurarea pas cu pas a modulului de generare

Cea mai modernă modalitate de a implementa acest lucru este printr-un modul dedicat în Android Studio. Pentru început, trebuie să accesați Noul modul și selectați șablonul Generator de profil de bazăAici veți defini aplicația țintă, numele modulului (de exemplu, baselineprofile) și limbajul preferat, fie Kotlin, fie Java.

Acest proces automatizează crearea unui mediu de testare. Expertul va configura pluginul. androidx.baselineprofile și va adăuga biblioteca instalator de profiluri în modulul aplicației. Acesta din urmă este responsabil pentru asigurarea instalării corecte a profilului pe dispozitivele utilizatorilor, chiar și pe versiuni mai vechi de Android care nu acceptă profiluri cloud.

Un detaliu tehnic important este gestionarea ofuscării. Pentru ca profilul să fie valid, acesta trebuie generat pe o variantă în care `isMinifyEnabled` este setat la `false` . Totuși, nu vă faceți griji pentru versiunea finală: R8 este capabil să rescrie regulile profilului pentru a se potrivi cu codul ofuscat al APK-ului de producție, menținând astfel securitatea maximă și optimizarea dimensiunii.

Crearea de călătorii critice ale utilizatorilor (CUJ)

Un profil de bază care doar lansează aplicația este util, dar pentru a profita la maximum de performanța sa trebuie să definim Călătorii critice ale utilizatorilorAcest lucru se face în cadrul clasei BaselineProfileGenerator utilizând regula BaselineProfileRuleÎn interiorul blocului collectTrebuie să simulăm acțiunile reale pe care le-ar întreprinde un utilizator.

Automatizarea testelor de regresie vizuală și funcțională
Articol asociat:
Ghid complet pentru automatizarea testelor de regresie vizuală și funcțională

De exemplu, dacă aplicația dvs. are o încărcare asincronă, nu este suficient să apelați pur și simplu startActivityAndWait()Trebuie să implementați așteptări inteligente astfel încât sistemul să înregistreze codul care se execută atunci când conținutul apare în sfârșit. Acest lucru se realizează prin interacțiunea cu interfața prin UiAutomator, căutând elemente specifice și așteptând ca acestea să devină vizibile înainte de finalizarea testului.

Pentru un flux de lucru avansat, puteți programa generatorul derulează listele pe verticală folosind metoda flingNavigați la ecrane detaliate sau chiar gestionați dialogurile de permisiuni ale sistemului. Cu cât simularea este mai precisă, cu atât profilul generat va fi mai precis și, prin urmare, Cu cât experiența va fi mai lină utilizatorul final real.

Generarea și validarea performanței

Odată ce generatorul este scris, este timpul să îl rulați. În mod ideal, ar trebui să utilizați un Dispozitiv gestionat de Gradle (GMD) sau un emulator cu o imagine aosp să aibă permisiuni de root, deși versiunile recente ale bibliotecii permit deja generarea de profiluri pe dispozitive fizice cu Android 13 sau o versiune ulterioară fără complicații.

La rularea sarcinii Gradle :app:generateBaselineProfileSistemul lansează aplicația de mai multe ori, colectează clasele și metodele invocate și creează un fișier baseline-prof.txtAcest fișier este plasat automat în folderul de resurse al aplicației, gata pentru a fi inclus în AAB.

Pentru a afla dacă a funcționat cu adevărat, am folosit Jetpack MacrobenchmarkAm creat un test care compară două scenarii: unul cu CompilationMode.None() (fără optimizare) și altul cu CompilationMode.Partial() (folosind profilul). La analiza metricii timpPânăAfișareCompletăEste obișnuit să se observe reduceri drastice în milisecunde, validând faptul că codul critic nu mai trebuie compilat în timp real.

În scenarii din lumea reală, cum ar fi în cazul aplicațiilor la scară largă, s-a observat că firul de execuție Just-in-Time (JIT) trece de la a fi ocupat 25% din timp la doar 3%. Acest lucru eliberează resurse CPU și reduce sarcina termică a dispozitivului, rezultând o aplicație mai stabilă și mai eficientă , în special pe dispozitivele low-end.

Implementarea profilurilor de bază este una dintre cele mai rentabile investiții în experiența utilizatorului, deoarece permite software-ului să se simtă ușor și receptiv încă din prima secundă. Prin combinarea utilizării modulelor de referință pentru generarea și validarea constantă a timpilor de pornire, orice dezvoltator poate transforma o aplicație lentă într-un instrument instantaneu, profesional, care reține utilizatorii.


Adăugați ca sursă preferată în Google