Case study
In che modo Reddit ha utilizzato lo strumento di ottimizzazione R8 per miglioramenti delle prestazioni di grande impatto
Lettura di 4 minuti
Nel mondo odierno delle applicazioni mobile, un'esperienza utente fluida non è solo una funzionalità, ma una necessità. Tempi di caricamento lenti, interfacce che non rispondono e instabilità possono rappresentare ostacoli significativi al coinvolgimento e alla fidelizzazione degli utenti. Durante la collaborazione con il team Android Developer Relations, il team di ingegneri di Reddit ha utilizzato il punteggio di rendimento dell'app per valutare la propria app. Dopo aver valutato il rendimento, ha identificato un potenziale di miglioramento significativo e ha deciso di adottare le misure necessarie per sfruttare tutta la potenza di R8, lo strumento di ottimizzazione delle app per Android. Questa iniziativa mirata ha portato a notevoli miglioramenti nei tempi di avvio, riduzioni di frame lenti o bloccati e ANR e un aumento complessivo delle valutazioni del Play Store. Questo case study illustra in dettaglio come Reddit ha ottenuto questi risultati eccezionali.
In che modo lo Strumento di ottimizzazione R8 ha aiutato Reddit
R8 Optimizer è uno strumento fondamentale per l'ottimizzazione delle prestazioni su Android. Per migliorare il rendimento delle app sono necessari vari passaggi.Diamo una rapida occhiata a quelli più efficaci.
- Il tree shaking è il passaggio più importante per ridurre le dimensioni di un'app. In questo caso, viene rimosso il codice inutilizzato dalle dipendenze dell'app e dall'app stessa.
- L'incorporamento dei metodi sostituisce le chiamate ai metodi con il codice effettivo, migliorando le prestazioni dell'app.
- Unione delle classi e altre strategie vengono applicate per rendere il codice più compatto. A questo punto non si tratta più di leggibilità del codice sorgente da parte dell'uomo, ma di far funzionare rapidamente il codice compilato. Pertanto, le astrazioni, come le interfacce o le gerarchie di classi, non sono importanti e verranno rimosse.
- La riduzione degli identificatori modifica i nomi di classi, campi e metodi in nomi più brevi e senza significato. Quindi, anziché
MyDataModel, potresti ritrovarti con una classe chiamata a. - La riduzione delle risorse rimuove le risorse inutilizzate, come i file XML e le risorse disegnabili, per ridurre ulteriormente le dimensioni dell'app.
Fasi principali dell'ottimizzazione R8
Dai dati oggettivi alla soddisfazione degli utenti: identificare il successo in produzione
Reddit ha registrato risultati di rendimento migliori subito dopo l'implementazione di una nuova versione dell'app per gli utenti. Utilizzando Android vitals e Crashlytics, Reddit è riuscita ad acquisire metriche di rendimento su dispositivi reali con utenti effettivi, il che le ha permesso di confrontare la nuova release con le versioni precedenti.
In che modo R8 ha migliorato le prestazioni dell'app Reddit
Il team ha osservato un avvio a freddo più rapido del 40% , una riduzione del 30% degli errori "L'applicazione non risponde" (ANR), un miglioramento del 25% nel rendering dei frame e una riduzione del 14% delle dimensioni dell'app.
Questi miglioramenti sono fondamentali per la soddisfazione degli utenti. Un avvio più rapido significa meno attesa e accesso più rapido ai contenuti. Un numero inferiore di errori ANR porta a un'app più stabile e affidabile, riducendo la frustrazione degli utenti. Il rendering dei frame più fluido elimina i problemi dell'interfaccia utente, rendendo lo scorrimento e le animazioni fluidi e reattivi. Questo impatto tecnico positivo era chiaramente visibile anche nel sentiment degli utenti.
Gli indicatori di soddisfazione degli utenti relativi al successo dell'ottimizzazione erano direttamente visibili sul Google Play Store. Dopo l'implementazione della versione ottimizzata per R8, il team ha notato un cambiamento drastico e positivo nel sentiment e nel coinvolgimento degli utenti.
Drew Heavner: "Attivazione dello strumento per sfruttare appieno il potenziale di R8 in meno di due settimane"
Ancora più impressionante è che tutto questo è stato ottenuto con un impegno mirato. Drew Heavner, ingegnere software di Reddit che ha lavorato a questa iniziativa, ha osservato che l'implementazione delle modifiche per sfruttare tutto il potenziale di R8 ha richiesto meno di due settimane.
Confermare i miglioramenti: un'analisi approfondita con i macrobenchmark
Dopo aver osservato i miglioramenti significativi nel mondo reale, il team di ingegneria di Reddit e il team di Android Developer Relations di Google hanno condotto benchmark dettagliati per confermare scientificamente i vantaggi e sperimentare ulteriori ottimizzazioni. Per questa analisi, il team di ingegneria di Reddit ha fornito due versioni della propria app: una senza ottimizzazioni e un'altra che applicava R8 e altri due strumenti di ottimizzazione delle prestazioni di base: profili di base e profili di avvio.
I profili di base spostano in modo efficace i passaggi di compilazione Just in Time (JIT) dai dispositivi degli utenti ai computer degli sviluppatori. Il codice compilato Ahead Of Time (AOT) ha dimostrato di ridurre sia il tempo di avvio sia i problemi di rendering.
Quando un'app viene pacchettizzata, d8 dexer prende classi e metodi e crea i file classes.dex dell'app. Quando un utente apre l'app, questi file dex vengono caricati uno dopo l'altro finché l'app non può essere avviata. Fornendo un profilo di avvio, comunichi a d8 quali classi e metodi includere nei primi file classes.dex. Questa struttura consente all'app di caricare meno file, il che a sua volta migliora la velocità di avvio.
Jetpack Macrobenchmark è stato lo strumento principale di questa fase, in quanto ha consentito di misurare con precisione le interazioni degli utenti in un ambiente controllato. Per simulare il percorso tipico di un utente, hanno utilizzato l'API UIAutomator per creare un test che aprisse l'app, scorresse verso il basso tre volte e poi scorresse di nuovo verso l'alto.
Alla fine, per scrivere il benchmark è stato necessario solo questo:
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}I dati di benchmark hanno confermato le osservazioni sul campo e fornito approfondimenti più dettagliati. L'app completamente ottimizzata è stata avviata il 55% più velocemente e gli utenti hanno potuto iniziare a navigare il 18% prima. L'app ottimizzata ha anche mostrato una riduzione di due terzi delle occorrenze di compilazione Just in Time (JIT) e una diminuzione di un terzo del tempo di compilazione JIT. Il rendering dei frame è migliorato, con un aumento del 19% dei frame visualizzati rispetto al percorso dell'utente di riferimento. Infine, le dimensioni dell'app sono state ridotte di oltre un terzo.
Miglioramenti generali delle prestazioni di Reddit
Puoi misurare il tempo di compilazione JIT con una metrica di sezione di traccia Macrobenchmark personalizzata come questa:
val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")Attivare la tecnologia alla base della trasformazione: R8
Per attivare R8 in modalità completa, configura il file app/build.gradle.kts impostando minifyEnabled e shrinkResources su true nel tipo di compilazione di release.
android {
...
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro",
)
}
}
}Questo passaggio deve essere seguito da test end-to-end olistici, poiché le ottimizzazioni delle prestazioni possono portare a comportamenti indesiderati, che è meglio rilevare prima che lo facciano gli utenti.
Come mostrato in precedenza in questo articolo, R8 esegue ottimizzazioni estese per massimizzare i vantaggi in termini di rendimento. R8 apporta modifiche sostanziali al codice, tra cui la ridenominazione, lo spostamento e la rimozione di classi, campi e metodi. Se noti che queste modifiche causano errori, devi specificare quali parti del codice non devono essere modificate da R8 dichiarandole nelle regole di conservazione.
Segui l'esempio di Reddit nella tua app
Il successo di Reddit con R8 funge da potente caso di studio per qualsiasi team di sviluppo che voglia avere un impatto significativo e con poco sforzo sulle prestazioni della propria app. La correlazione diretta tra i miglioramenti tecnici e il successivo aumento della soddisfazione degli utenti sottolinea il valore dell'ottimizzazione delle prestazioni.
Seguendo il progetto descritto in questo case study, utilizzando strumenti come il punteggio delle prestazioni dell'app per identificare le opportunità, sfruttando tutto il potenziale di ottimizzazione di R8, monitorando i dati reali e utilizzando i benchmark per confermare e approfondire la comprensione, altri sviluppatori possono ottenere risultati simili.
Per iniziare a utilizzare R8 nella tua app, consulta la documentazione e le indicazioni ufficiali appena aggiornate sull'attivazione, la configurazione e la risoluzione dei problemi dell'ottimizzatore R8.
Continua a leggere
-
Case study
Monzo è una banca digitale del Regno Unito con 15 milioni di clienti e in crescita. Con l'aumento delle dimensioni dell'app, il team di ingegneria ha identificato il tempo di avvio dell'app come un'area critica da migliorare, ma temeva che ciò avrebbe richiesto modifiche significative al codebase.
Ben Weiss • Lettura di 2 minuti
-
Case study
TikTok è una piattaforma globale di video brevi nota per la sua vasta base utenti e le sue funzionalità innovative.
Ben Trengrove, Ajesh Pai • Lettura di 2 minuti
-
Case study
Nel mondo dinamico dei social media, l'attenzione degli utenti si guadagna o si perde rapidamente. Le app Meta (Facebook e Instagram) sono tra le più grandi piattaforme social al mondo e servono miliardi di utenti a livello globale.
Mayuri Khinvasara Khabya • Lettura di 4 minuti
Segui gli aggiornamenti
Ricevi ogni settimana gli ultimi approfondimenti sullo sviluppo per Android direttamente nella tua casella di posta.