Casos de sucesso
Como o Reddit usou o otimizador R8 para melhorias de desempenho de alto impacto
Leitura de 4 minutos
No mundo atual dos 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 do usuário e a retenção. 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 aplicativo. 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 a performance 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 usado das dependências 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 momento, 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 minificaçã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 usados, 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 que eles comparassem o novo lançamento com as versões 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 do 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.
A biblioteca Macrobenchmark do Jetpack 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 três vezes para baixo e depois rolou de volta 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
Você pode 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 modelo apresentado neste caso de sucesso (usando ferramentas como a pontuação de desempenho do app para identificar oportunidades, ativando todo o potencial de otimização do R8, monitorando dados do mundo real e usando benchmarks 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 e as orientações oficiais 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 que isso exigisse mudanças significativas na base de código.
Ben Weiss • Leitura de 2 minutos
-
Casos de sucesso
O TikTok é uma plataforma global de vídeos curtos conhecida pela enorme base de usuários e recursos inovadores.
Ben Trengrove, Ajesh Pai • Leitura de 2 minutos
-
Casos de sucesso
No mundo dinâmico das redes sociais, a atenção do usuário é ganha ou perdida rapidamente. Os apps do Meta (Facebook e Instagram) estão entre as maiores plataformas sociais do mundo e atendem a bilhões de usuários globalmente.
Mayuri Khinvasara Khabya • Leitura de 4 minutos
Fique por dentro
Receba os insights mais recentes sobre o desenvolvimento do Android na sua caixa de entrada semanalmente.