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%, evitando a interpretação e as etapas de compilação just-in-time (JIT) para jornadas comuns do usuário. Os perfis de referência permitem escolher as jornadas do usuário que você quer otimizar e podem ajudar a melhorar a inicialização do app, reduzir a instabilidade e muito mais, o que por sua vez, resulta em métricas de negócios aprimoradas, como retenção e classificações de usuários. Saiba mais sobre os perfis de referência.

A equipe do Google Agenda implementou perfis de referência e observou uma melhoria de aproximadamente 20% no tempo de inicialização do app e uma redução de aproximadamente 50% nos frames lentos ou congelados. Confira o que eles fizeram de ponta a ponta para alcançar esses ganhos de performance, desde o motivo pelo qual decidiram usar perfis de referência até como mediram o impacto.

Perfis da nuvem x perfis de referência

A equipe do Google Agenda já estava usando perfis da nuvem, que são outro método de otimização guiada por perfil (PGO, na sigla em inglês) com base em interações reais do usuário com o app. Confira como os perfis da nuvem e os perfis de referência se comparam:

Tipo de perfil Configurar Jornadas do usuário incluídas Funciona melhor quando a base de usuários é Impacto realizado Versões do Android com suporte

Perfis da nuvem

Ativado por padrão

Escolhido automaticamente com base em dados reais do usuário

Grande

Em alguns dias

Android 9 (nível 28 da API) 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 pelos quais a equipe do Google Agenda decidiu adicionar perfis de referência à base de código foi a mudança para um ciclo de lançamento semanal mais rápido. Embora os perfis da nuvem ofereçam ganhos significativos de performance, eles levam de um a dois dias após o lançamento do app para atingir o impacto máximo, porque dependem da agregação de dados reais do usuário. Complementar os perfis da nuvem com perfis de referência oferece aos usuários mais tempo para aproveitar as melhorias de performance máxima antes do lançamento da próxima versão do app.

Além disso, era importante que a equipe do Google Agenda pudesse escolher quais jornadas ideais do usuário (CUJs) específicas seriam incluídas no perfil, o que pode ser feito usando perfis de referência.

Em geral, recomendamos o uso de perfis de referência, além dos perfis da nuvem, ativados por padrão, para os melhores resultados de performance.

Jornadas do usuário incluídas

A equipe do Google Agenda optou por incluir duas CUJs nos perfis de referência:

  • Abrir o app na visualização de agenda: inicialmente a visualização padrão, por isso é importante otimizar para usuários que usam o app pela primeira vez ou que não mudam as configurações padrão.
  • Abrir o app na visualização de mês: a visualização escolhida para muitos usuários, com base nos dados do usuário. Para acompanhar como os usuários estão usando seu app, você pode usar ferramentas como o Firebase.

Em geral, adicione as CUJs que são lucrativas para a empresa (se aplicável) e as mais comuns. Para saber mais sobre como escolher CUJs para otimizar, consulte O que incluir.

Implementação

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

Confira a configuração de teste da Macrobenchmark para abrir o app na visualização de agenda:

@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" }
        }
    }

Substitua o seguinte:

  • PACKAGE_NAME: o nome do pacote do app para o qual você quer gerar perfis de referência.

Medir o impacto usando lançamentos controlados

Como os perfis de referência estão fortemente acoplados ao APK com que são enviados e incorporados antes da execução do app, não é possível executar um experimento A/B padrão para entender o impacto deles. No entanto, a equipe do Google Agenda conseguiu uma medida precisa do impacto usando lançamentos controlados, em que você basicamente lança a nova versão do app apenas para um subconjunto de usuários e os compara com usuários que estão em uma versão semelhante à anterior.

Com os perfis de referência, eles observaram as seguintes melhorias significativas e imediatas em várias áreas. Essas estatísticas são agregadas em uma ampla variedade de dispositivos e em todos os usuários. Aqueles que começam na visualização de agenda e mês provavelmente têm os maiores benefícios, mas outros usuários também se beneficiam devido à otimização de processos compartilhados, como o carregamento de dados da agenda do banco de dados.

  • A latência mediana de inicialização interativa do app (cenário mais comum) diminuiu de 775 ms para 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 taxa mediana de frames instáveis diminuiu de 42% a 60% nas visualizações de agenda e mês.

Lembre-se de que, se você usar perfis da nuvem em conjunto com perfis de referência , é provável que as melhorias diminuam um pouco ao longo da primeira semana , à medida que os perfis da nuvem são gerados. No entanto, você ainda vai observar ganhos significativos de performance com perfis de referência, além de outras otimizações que você tem.

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