Come il team di Android Calendar ha migliorato l'avvio e il jank delle app con i profili di riferimento

I profili di baseline migliorano la velocità di esecuzione del codice fino al 30% evitando i passaggi di compilazione dell'interprete e just-in-time (JIT) per i percorsi utente comuni. I profili di baseline ti consentono di scegliere i percorsi utente che vuoi ottimizzare e possono contribuire a migliorare l'avvio dell'app, ridurre i blocchi e altro ancora, il che a sua volta comporta un miglioramento delle metriche aziendali, come la fidelizzazione e le valutazioni degli utenti. Scopri di più sui profili di baseline.

Il team di Android Calendar ha implementato i profili di baseline e ha osservato un miglioramento di circa il 20% del tempo di avvio dell'app e una riduzione di circa il 50% dei frame lenti o bloccati. Ecco cosa hanno fatto end-to-end per ottenere questi miglioramenti delle prestazioni, dal motivo per cui hanno deciso di utilizzare i profili di baseline al modo in cui hanno misurato l'impatto.

Profili Cloud e profili di baseline

Il team di Android Calendar utilizzava già i profili Cloud, che sono un altro metodo di ottimizzazione guidata dal profilo (PGO) basato sulle interazioni degli utenti reali con l'app. Ecco un confronto tra i profili Cloud e i profili di baseline:

Tipo di profilo Configurazione Percorsi utente inclusi Funziona meglio quando la base utenti è Impatto realizzato Versioni di Android supportate

Profili Cloud

Attivati per impostazione predefinita

Scelti automaticamente in base ai dati utente reali

Grande

Entro un paio di giorni

Android 9 (livello API 28) e versioni successive

Profili di baseline

Configurati da te

Scelti da te

Tutte le dimensioni

Vista fattura

Android 7 (livello API 24) e versioni successive

Uno dei motivi principali per cui il team di Android Calendar ha deciso di aggiungere i profili di baseline al proprio codebase è stato il passaggio a un ciclo di release settimanale più rapido. Sebbene i profili Cloud offrano notevoli miglioramenti delle prestazioni, impiegano 1-2 giorni dopo il lancio dell'app per raggiungere il loro impatto massimo perché si basano sull' aggregazione dei dati utente reali. L'integrazione dei profili Cloud con i profili di baseline offre agli utenti più tempo per sperimentare i miglioramenti delle prestazioni di picco prima del lancio della versione successiva dell'app.

Inoltre, per il team di Android Calendar era importante poter scegliere quali percorsi utente critici (CUJ) includere specificamente nel profilo, cosa che puoi fare utilizzando i profili di baseline.

In genere, consigliamo di utilizzare i profili di baseline in aggiunta ai profili Cloud, attivati per impostazione predefinita, per ottenere i migliori risultati in termini di prestazioni.

Percorsi utente inclusi

Il team di Android Calendar ha scelto di includere due CUJ nei propri profili di baseline:

  • Apertura dell'app nella visualizzazione della pianificazione: inizialmente la visualizzazione predefinita, quindi è importante ottimizzarla per gli utenti che utilizzano l'app per la prima volta o che non modificano le impostazioni predefinite.
  • Apertura dell'app nella visualizzazione mensile: la visualizzazione scelta da molti utenti, in base ai dati utente. Per monitorare l'utilizzo dell'app da parte degli utenti, puoi utilizzare strumenti come Firebase.

In genere, dovresti aggiungere i CUJ che sono redditizi per l'attività (se applicabile) e i CUJ più comuni. Per scoprire di più su come scegliere i CUJ da ottimizzare, consulta Cosa includere.

Implementazione

Il team di Android Calendar utilizza un wrapper interno per la libreria Jetpack Macrobenchmark per generare profili di baseline per facilitare l'integrazione con gli strumenti interni e la scalabilità generale.

Ecco la configurazione del test Macrobenchmark per l'apertura dell'app nella visualizzazione della pianificazione:

@Test
fun generateProfile() =
    baselineProfileRule.collect(PACKAGE_NAME, includeInStartupProfile = true) {
        uiAutomator {
            startApp(packageName = PACKAGE_NAME)
            // Verify pre-existing recurring events and tasks are shown.
            // onElement waits for the element by default
            onElement { textAsString() == "Recurring event" }
            onElement { textAsString() == "Recurring task" }

            // Open drawer and verify selected view.
            onElement { contentDescriptionAsString() == "Show Calendar List and Settings drawer" }.click()
            onElement { contentDescriptionAsString() == "Schedule view, Selected" }
        }
    }

Sostituisci quanto segue:

  • PACKAGE_NAME: il nome del pacchetto dell'app per cui vuoi generare i profili di baseline.

Misurare l'impatto utilizzando le release controllate

Poiché i profili di baseline sono strettamente accoppiati all'APK con cui vengono spediti e incorporati prima dell'esecuzione dell'app, non è possibile eseguire un esperimento A/B standard per comprenderne l'impatto. Tuttavia, il team di Android Calendar è riuscito a ottenere una misurazione precisa dell'impatto utilizzando le release controllate, in cui essenzialmente rilasci la nuova versione dell'app solo a un sottoinsieme di utenti e la confronti con gli utenti che utilizzano una versione simile alla release precedente.

Con i profili di baseline, hanno riscontrato i seguenti miglioramenti immediati e significativi in diverse aree. Queste statistiche sono aggregate su un'ampia gamma di dispositivi e su tutti gli utenti: quelli che iniziano nella visualizzazione della pianificazione e mensile probabilmente ottengono i maggiori vantaggi, ma anche gli altri utenti ne traggono beneficio grazie all'ottimizzazione dei processi condivisi, come il caricamento dei dati del calendario dal database.

  • La latenza mediana dell'avvio dell'app interattiva (scenario più comune) è diminuita da 775 ms a 644 ms (17%)
  • La latenza mediana dell'avvio a freddo è diminuita da 1058 ms a 901 ms (15%)
  • La latenza mediana dell'avvio tiepido è diminuita da 453 ms a 378 ms (17%)
  • La frequenza dei frame con blocchi mediana è diminuita del 42-60% nelle visualizzazioni della pianificazione e mensile

Tieni presente che se utilizzi i profili Cloud insieme ai profili di baseline è probabile che i miglioramenti diminuiscano leggermente nel corso della prima settimana, man mano che vengono generati i profili Cloud. Tuttavia, dovresti comunque osservare miglioramenti significativi delle prestazioni con i profili di baseline in aggiunta ad altre ottimizzazioni in atto.

Per scoprire di più sugli strumenti e sulle funzionalità, consulta le seguenti risorse: