Como a equipe do Google Agenda do Android melhorou a inicialização e a instabilidade do app com os perfis de referência

Os perfis de referência melhoram a velocidade de execução do código em até 30% ao evitar intérprete e compilação just-in-time (JIT) etapas jornadas de usuário comuns. Os perfis de referência permitem escolher as jornadas do usuário que você quer otimizar e pode ajudar a melhorar a inicialização do app, reduzir a instabilidade e muito mais, o que , por sua vez, resultam em melhores métricas de negócios, como retenção de usuários e classificações. Saiba mais sobre o valor de referência Perfis.

A equipe do Google Agenda implementou perfis de referência e observou cerca de 20% do app. de melhoria no tempo de inicialização e cerca de 50% de redução de frames lentos ou congelados. Aqui está o que eles fizeram de ponta a ponta para alcançar essas vitórias de desempenho, e por que eles decidiram usar perfis de referência para medir o impacto.

Perfis da nuvem x Perfis de referência

A equipe do Google Agenda no Android já estava usando o Cloud Perfis, que são outro método de otimização guiada por perfil (PGO, na sigla em inglês) baseado em dados reais interações com o app. Saiba como os perfis da nuvem e os perfis de referência comparar:

Tipo de perfil Configurar Jornadas do usuário incluídas Funciona melhor quando a base de usuários é Impacto alcançado Versões do Android compatíveis

Perfis da nuvem

Ativado por padrão

Escolhido automaticamente com base em dados reais de usuários

Grande

Em alguns dias

Android 9 (API de nível 28) e versões mais recentes

Perfis de referência

Configurado por você

Escolhido por você

Todos os tamanhos

Imediata

Android 7 (nível 24 da API) e versões mais recentes

Um dos principais motivos que fizeram a equipe do Google Agenda do Android adicionar os perfis de referência ao a base de código era porque eles estavam migrando para um ciclo de lançamento semanal mais rápido. Embora os perfis da nuvem proporcionem ganhos de desempenho significativos, são necessários de um a dois dias após o lançamento do app para que alcancem o pico de impacto, porque dependem e agregar dados reais de usuários. Como complementar perfis de nuvem com valores de referência Os perfis oferecem aos usuários mais tempo para experimentar melhorias de desempenho máximas antes do lançamento da próxima versão.

Além disso, era importante para a equipe do Google Agenda para Android conseguir escolher quais jornadas críticas do usuário (CUJs) estão incluídas especificamente no perfil, o que pode ser feito usando os perfis de referência.

Geralmente, recomendamos usar perfis de referência, além de perfis de nuvem, ativado por padrão para ter os melhores resultados de desempenho.

Jornadas do usuário incluídas

A equipe do Agenda do Android escolheu incluir duas CUJs nos perfis de referência:

  • Abrir o aplicativo na visualização de programação: inicialmente, a visualização padrão. Portanto, é importante são otimizados para usuários que usam o app pela primeira vez ou que não alteram configurações padrão.
  • Abrir o app na visualização de mês: a visualização escolhida para muitos usuários, com base no usuário dados. Para acompanhar como os usuários estão utilizando seu aplicativo, você pode usar ferramentas como Firebase:

Geralmente, você deve adicionar as CUJs que são lucrativas para a empresa (se aplicável), e as CUJs mais comuns. Para saber mais sobre como escolher CUJs que precisam ser otimizadas, consulte O que fazer incluem.

Implementação

A equipe do Google Agenda para Android usa um wrapper interno para o Biblioteca Jetpack Macrobenchmark para gerar perfis de referência e facilitar a integração com ferramentas internas e escalonabilidade geral.

Confira a configuração de teste da Macrobenchmark para abrir o app na programação visualizar:

@Test
fun generateProfile() =
    baselineProfileRule.collect(PACKAGE_NAME, includeInStartupProfile = true) {
        startActivityAndWait()
        // Verify pre-existing recurring events and tasks are shown.
        device.waitAndFindObject(By.text("Recurring event"), 20_000)
        device.waitAndFindObject(By.text("Recurring task"), 20_000)

        // Open drawer and verify selected view.
        device.findObject(By.desc("Show Calendar List and Settings drawer")).click()
        device.waitAndFindObject(By.desc("Schedule view, Selected"), 1_000)
    }

Medir o impacto com versões controladas

Como os perfis de referência estão fortemente associados ao APK de que são enviados e incorporada antes da execução do app, não é possível executar um modelo A/B para entender o impacto deles. No entanto, a equipe do Google Agenda no Android ter uma medida precisa do impacto com versões controladas, em que você lançar a nova versão do aplicativo apenas para um subconjunto de usuários e comparar para os usuários que usam uma versão semelhante à anterior.

Com os perfis de referência, eles tiveram os seguintes resultados imediatos, melhorias em várias áreas. Essas estatísticas são agregadas em uma ampla variedade de dispositivos e entre todos os usuários, aqueles que iniciam a programação e a visualização de mês obterão os maiores benefícios, mas outros usuários também se beneficiarão devido à a otimização de processos compartilhados, como o carregamento de dados de calendário do no seu banco de dados.

  • A latência mediana da inicialização do app interativo (cenário mais comum) diminuiu de 775 ms a 644 ms (17%)
  • A latência mediana de inicialização a frio diminuiu de 1.058 ms para 901 ms (15%)
  • A latência mediana de inicialização com estado salvo diminuiu de 453 ms para 378 ms (17%)
  • A instabilidade mediana do frame rate diminuiu entre 42% e 60% nas visualizações por mês e por programação

Se você usar os perfis da nuvem com o valor de referência, Perfis em que você provavelmente notará uma pequena diminuição das melhorias ao longo do na primeira semana, conforme os perfis são gerados. No entanto, ainda é necessário ganhos de performance significativos com os perfis de referência, além dos outros para as otimizações em vigor.

Para saber mais sobre as ferramentas e funcionalidades, consulte os seguintes recursos: