Case study
In che modo Reddit ha utilizzato l'ottimizzatore R8 per migliorare il rendimento in modo significativo
Lettura di 4 minuti
Nel mondo delle applicazioni mobile di oggi, 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 per il coinvolgimento e la fidelizzazione degli utenti. Durante il lavoro con il team per le relazioni con gli sviluppatori Android, il team di ingegneri di Reddit ha utilizzato il punteggio di rendimento dell'app per valutare la propria app per Android. Dopo aver valutato il rendimento, ha identificato un potenziale di miglioramento significativo e ha deciso di adottare le misure necessarie per sfruttare appieno la potenza di R8, l'ottimizzatore di app per Android. Questa iniziativa mirata ha portato a miglioramenti notevoli dei tempi di avvio, alla riduzione dei frame lenti o bloccati e degli errori ANR e a un aumento complessivo delle valutazioni del Play Store. Questo case study illustra in che modo Reddit ha ottenuto questi risultati straordinari.
In che modo l'ottimizzatore R8 ha aiutato Reddit
L'ottimizzatore R8 è uno strumento fondamentale per l'ottimizzazione del rendimento su Android. Adotta varie misure per migliorare il rendimento dell'app.Diamo una rapida occhiata a quelle più efficaci.
- Il tree shaking è il passaggio più importante per ridurre le dimensioni di un'app. In questo caso, il codice inutilizzato delle dipendenze dell'app e dell'app stessa viene rimosso.
- L'inlining dei metodi sostituisce le chiamate ai metodi con il codice effettivo, rendendo l'app più performante.
- Il merge 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 in questo caso 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 gli elementi disegnabili, per ridurre ulteriormente le dimensioni dell'app.
Fasi principali dell'ottimizzazione R8
Dai dati concreti alla soddisfazione degli utenti: identificare il successo in produzione
Reddit ha riscontrato un miglioramento del rendimento immediatamente dopo il lancio di una nuova versione dell'app per gli utenti.Utilizzando Android vitals e Crashlytics, Reddit è riuscita ad acquisire metriche sul rendimento su dispositivi reali con utenti reali, consentendole di confrontare la nuova release con le versioni precedenti.
In che modo R8 ha migliorato le prestazioni dell'app di Reddit
Il team ha osservato un avvio a freddo più veloce del 40% , una riduzione del 30% degli errori "L'applicazione non risponde" (ANR), un miglioramento del 25% del 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 un accesso più veloce ai contenuti. Un minor numero di errori ANR porta a un'app più stabile e affidabile, riducendo la frustrazione degli utenti. Un rendering dei frame più fluido elimina i problemi dell'interfaccia utente, rendendo lo scorrimento e le animazioni fluidi e reattivi. Questo impatto tecnico positivo è stato chiaramente visibile anche nel sentiment degli utenti.
Gli indicatori di soddisfazione degli utenti relativi al successo dell'ottimizzazione erano visibili direttamente sul Google Play Store. Dopo il lancio della versione ottimizzata per R8, il team ha riscontrato un cambiamento drastico e positivo nel sentiment e nel coinvolgimento degli utenti.
Drew Heavner: "Abilitazione dello strumento per sfruttare appieno il potenziale di R8 in meno di 2 settimane"
Ancora più impressionante è il fatto che questo risultato è stato ottenuto con uno sforzo mirato. Drew Heavner, Staff Software Engineer di Reddit che ha lavorato a questa iniziativa, ha osservato che l'implementazione delle modifiche per sfruttare appieno il potenziale di R8 ha richiesto meno di due settimane.
Confermare i vantaggi: un'analisi approfondita con i macrobenchmark
Dopo aver osservato i miglioramenti significativi nel mondo reale, il team di ingegneri di Reddit e il team per le relazioni con gli sviluppatori Android di Google hanno condotto benchmark dettagliati per confermare scientificamente i vantaggi e sperimentare ulteriori ottimizzazioni. Per questa analisi, il team di ingegneri di Reddit ha fornito due versioni della propria app: una senza ottimizzazioni e un'altra che applicava R8 e altri due strumenti di ottimizzazione del rendimento di base: profili di base e profili di avvio.
I profili di base spostano efficacemente i passaggi di compilazione Just in Time (JIT) dai dispositivi degli utenti ai computer degli sviluppatori. È stato dimostrato che il codice compilato Ahead Of Time (AOT) generato riduce sia il tempo di avvio sia i problemi di rendering.
Quando un'app viene pacchettizzata, il dexer d8 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 , indichi a d8 quali classi e metodi inserire 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 per questa fase, in quanto ha consentito di misurare con precisione le interazioni degli utenti in un ambiente controllato. Per simulare un percorso utente tipico, hanno utilizzato l'API UIAutomator per creare un test che aprisse l'app, scorresse tre volte verso il basso 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ù approfonditi. 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 riduzione di un terzo del tempo di compilazione JIT. Il rendering dei frame è migliorato, con un aumento del 19% dei frame sottoposti a rendering durante il percorso utente di benchmark. Infine, le dimensioni dell'app sono state ridotte di oltre un terzo.
Miglioramenti complessivi del rendimento di Reddit
Puoi misurare il tempo di compilazione JIT con una metrica della sezione di traccia Macrobenchmark personalizzata come questa:
val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")
Abilitare la tecnologia alla base della trasformazione: R8
Per abilitare 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 del rendimento 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 le parti del codice che R8 non deve modificare dichiarandole nelle regole di conservazione.
Segui l'esempio di Reddit nella tua app
Il successo di Reddit con R8 è un case study efficace per qualsiasi team di sviluppo che voglia avere un impatto significativo e senza sforzo sul rendimento della propria app. La correlazione diretta tra i miglioramenti tecnici e il conseguente aumento della soddisfazione degli utenti sottolinea il valore dell'ottimizzazione del rendimento.
Seguendo il progetto descritto in questo case study, utilizzando strumenti come il punteggio di rendimento dell'app per identificare le opportunità, sfruttando appieno 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 linee guida ufficiali appena aggiornate sull'abilitazione, 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 lo scale up dell'app, il team di ingegneri ha identificato il tempo di avvio dell'app come un'area critica da migliorare, ma temeva che ciò richiedesse modifiche significative al codebase.
Ben Weiss, Tracy Agyemang • Lettura di 2 minuti
-
Case study
L'app di mindfulness Gratitude incoraggia la coerenza attraverso micro-registrazioni giornaliere, affermazioni e vision board. L'app ha oltre 6 milioni di download, 150.000 valutazioni a 5 stelle e 100 milioni di voci di diario registrate.
Amrit Sanjeev, Ash Nohe • Lettura di 3 minuti
-
Case study
Karrot è un'app marketplace peer-to-peer iperlocale e basata sulla community che consente agli utenti di acquistare, vendere e scambiare articoli con altri utenti verificati. Dal lancio in Corea del Sud nel 2015, la piattaforma si è espansa nei mercati globali, accumulando oltre 43 milioni di utenti registrati.
Thomas Ezan, Tracy Agyemang • Lettura di 2 minuti
Resta al passo con le novità
Ricevi ogni settimana nella tua casella di posta gli ultimi approfondimenti sullo sviluppo di Android.