Casos de sucesso
Como o Reddit usou o otimizador R8 para melhorias de desempenho de alto impacto
Leitura de 4 minutos
No mundo atual de aplicativos para dispositivos móveis, uma experiência do usuário perfeita não é apenas um recurso, mas uma necessidade. Tempos de carregamento lentos, interfaces sem resposta e instabilidade podem ser barreiras significativas para o engajamento e a retenção de usuários. Durante o trabalho com a equipe de relações com desenvolvedores do Android, a equipe de engenharia do Reddit usou a pontuação de desempenho do app para avaliar o app. Depois de avaliar a performance, eles identificaram um potencial de melhoria significativo e decidiram tomar as medidas necessárias para ativar todo o poder do R8, o otimizador de apps Android. Essa iniciativa focada levou a melhorias notáveis nos tempos de inicialização, reduções em frames lentos ou congelados e ANRs, além de um aumento geral nas classificações da Google Play Store. Este caso de sucesso detalha como o Reddit alcançou esses resultados impressionantes.
Como o otimizador R8 ajudou o Reddit
O otimizador R8 é uma ferramenta fundamental para a otimização de desempenho no Android. Ele realiza várias etapas para melhorar o desempenho do app.Vamos dar uma olhada rápida nas mais impactantes.
- O tree shaking é a etapa mais importante para reduzir o tamanho de um app. Aqui, o código não utilizado das dependências do app e do próprio app é removido.
- O método inlining substitui chamadas de método pelo código real, tornando o app mais eficiente.
- A **mesclagem de classes** e outras estratégias são aplicadas para tornar o código mais compacto. Nesse ponto, não se trata mais da legibilidade do código-fonte, mas de fazer com que o código compilado funcione rapidamente. Portanto, abstrações, como interfaces ou hierarquias de classes, não importam aqui e serão removidas.
- A minimização de identificadores muda os nomes de classes, campos e métodos para nomes mais curtos e sem sentido. Assim, em vez de
MyDataModel, você pode acabar com uma classe chamada a. - A redução de recursos remove recursos não utilizados, como arquivos XML e drawables, para reduzir ainda mais o tamanho do app.
Principais estágios da otimização do R8
De dados concretos à satisfação do usuário: identificando o sucesso na produção
O Reddit observou resultados de desempenho aprimorados imediatamente após o lançamento de uma nova versão do app para os usuários.Ao usar Android Vitals e Crashlytics, o Reddit conseguiu capturar métricas de desempenho em dispositivos reais com usuários reais, permitindo comparar a nova versão com as anteriores.
Como o R8 melhorou o desempenho do app do Reddit
A equipe observou uma inicialização a frio 40% mais rápida, uma redução de 30% nos erros "O app não está respondendo" (ANR), uma melhoria de 25% na renderização de frames e uma redução de 14% no tamanho do app.
Essas melhorias são essenciais para a satisfação do usuário. Uma inicialização mais rápida significa menos espera e acesso mais rápido ao conteúdo. Menos ANRs levam a um app mais estável e confiável, reduzindo a frustração do usuário. A renderização de frames mais suave remove a instabilidade da interface, tornando a rolagem e as animações fluidas e responsivas. Esse impacto técnico positivo também ficou claramente visível no sentimento do usuário.
Os indicadores de satisfação do usuário do sucesso da otimização ficaram visíveis diretamente na Google Play Store. Após o lançamento da versão otimizada para R8, a equipe observou uma mudança drástica e positiva no sentimento e no engajamento do usuário.
Drew Heavner: "Ativando a ferramenta de potencial total do R8 em menos de duas semanas"
O mais impressionante é que isso foi realizado com um esforço focado. Drew Heavner, engenheiro de software do Reddit que trabalhou nessa iniciativa, observou que a implementação das mudanças para ativar todo o potencial do R8 levou menos de duas semanas.
Confirmando os ganhos: uma análise detalhada com macrobenchmarks
Depois de observar as melhorias significativas no mundo real, a equipe de engenharia do Reddit e a equipe de relações com desenvolvedores do Android do Google realizaram benchmarks detalhados para confirmar cientificamente os ganhos e experimentar outras otimizações. Para essa análise, a engenharia do Reddit forneceu duas versões do app: uma sem otimizações e outra que aplicou R8 e mais duas ferramentas fundamentais de otimização de desempenho: perfis de referência e perfis de inicialização.
Os perfis de referência movem as etapas de compilação Just in Time (JIT) dos dispositivos do usuário para as máquinas do desenvolvedor. O código compilado Ahead Of Time (AOT) gerado comprovadamente reduz o tempo de inicialização e os problemas de renderização.
Quando um app é empacotado, o dexer d8 usa classes e métodos e cria os arquivos classes.dex do app. Quando um usuário abre o app, esses arquivos dex são carregados, um após o outro, até que o app possa ser iniciado. Ao fornecer um perfil de inicialização , você informa ao d8 quais classes e métodos empacotar nos primeiros arquivos classes.dex. Essa estrutura permite que o app carregue menos arquivos, o que, por sua vez, melhora a velocidade de inicialização.
O Jetpack Macrobenchmark foi a ferramenta principal para essa fase, permitindo a medição precisa das interações do usuário em um ambiente controlado. Para simular uma jornada típica do usuário, eles usaram a API UIAutomator para criar um teste que abriu o app, rolou para baixo três vezes e depois rolou para cima.
No final, tudo o que era necessário para escrever o benchmark era o seguinte:
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}
Os dados de benchmark confirmaram as observações de campo e forneceram insights mais detalhados. O app totalmente otimizado foi iniciado 55% mais rápido e os usuários puderam começar a navegar 18% mais cedo. O app otimizado também mostrou uma redução de dois terços nas ocorrências de compilação Just in Time (JIT) e uma diminuição de um terço no tempo de compilação JIT. A renderização de frames melhorou, resultando em 19% mais frames renderizados na jornada do usuário comparada. Por fim, o tamanho do app foi reduzido em mais de um terço.
Melhorias gerais de desempenho do Reddit
É possível medir o tempo de compilação JIT com uma métrica de seção de rastreamento de Macrobenchmark personalizada como esta:
val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation")
Ativando a tecnologia por trás da transformação: R8
Para ativar o R8 no modo completo, configure o arquivo app/build.gradle.kts definindo minifyEnabled e shrinkResources como true no tipo de build de lançamento.
android {
...
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro",
)
}
}
}
Essa etapa precisa ser seguida por testes holísticos de ponta a ponta, já que as otimizações de desempenho podem levar a um comportamento indesejado, que é melhor detectar antes que os usuários o façam.
Como mostrado anteriormente neste artigo, o R8 realiza otimizações extensivas para maximizar os benefícios de desempenho. O R8 faz modificações substanciais no código, incluindo renomear, mover e remover classes, campos e métodos. Se você observar que essas modificações causam erros, especifique quais partes do código o R8 não deve modificar declarando-as nas regras de manutenção.
Siga o exemplo do Reddit no seu app
O sucesso do Reddit com o R8 serve como um caso de sucesso poderoso para qualquer equipe de desenvolvimento que queira causar um impacto significativo e de baixo esforço no desempenho do app. A correlação direta entre as melhorias técnicas e o aumento subsequente na satisfação do usuário ressalta o valor da otimização de desempenho.
Ao seguir o estudo de caso apresentado neste estudo de caso (usando ferramentas como a pontuação de desempenho do app para identificar oportunidades, ativar todo o potencial de otimização do R8, monitorar dados do mundo real e usar comparativos de mercado para confirmar e aprofundar a compreensão), outros desenvolvedores podem alcançar ganhos semelhantes.
Para começar a usar o R8 no seu app, consulte a documentação oficial e as orientações recém-atualizadas sobre como ativar, configurar e solucionar problemas do otimizador R8.
Continuar lendo
-
Casos de sucesso
O Monzo é um banco digital do Reino Unido com 15 milhões de clientes e em crescimento. À medida que o app era escalonado, a equipe de engenharia identificou o tempo de inicialização do app como uma área crítica para melhoria, mas se preocupou com o fato de que isso exigiria mudanças significativas na base de código.
Ben Weiss, Tracy Agyemang • Leitura de 2 minutos
-
Casos de sucesso
O FotMob recentemente teve o maior aumento em um único dia no Wear OS entre o público instalado em 5 anos, com 2 a 3 vezes a média diária. O segredo? Um fluxo de instalação simples entre dispositivos que ajuda os usuários a descobrir o app para Wear OS diretamente no smartphone.
Garan Jenkin • Leitura de 3 minutos
-
Casos de sucesso
O app de mindfulness Gratitude incentiva a consistência por meio de um microdiário diário, afirmações e quadros de visão. O app tem mais de 6 milhões de downloads, 150 mil classificações de 5 estrelas e 100 milhões de entradas de diário registradas.
Amrit Sanjeev, Ash Nohe • Leitura de 3 minutos
Fique por dentro
Receba os insights mais recentes sobre o desenvolvimento do Android na sua caixa de entrada semanalmente.