Estudos de caso
Como o Reddit usou o otimizador R8 para melhorias de performance 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 sim uma necessidade. Tempos de carregamento lentos, interfaces que não respondem 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 performance 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 estudo de caso mostra 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 performance no Android. São necessárias várias etapas para melhorar a performance do app.Vamos dar uma olhada rápida nas mais importantes.
- 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.
- A inclusão de métodos substitui as chamadas de método pelo código real, tornando o app mais eficiente.
- A fusão de classes e outras estratégias são aplicadas para tornar o código mais compacto. Neste ponto, não se trata mais da legibilidade humana do código-fonte, mas de fazer o código compilado funcionar 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 significado. 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 elementos gráficos, para reduzir ainda mais o tamanho do app.
Principais etapas da otimização do R8
De dados concretos à satisfação do usuário: identificando o sucesso na produção
O Reddit teve resultados de desempenho melhores imediatamente após o lançamento de uma nova versão do app para os usuários.Ao usar o Android Vitals e o Crashlytics, o Reddit conseguiu capturar métricas de desempenho em dispositivos reais com usuários reais, permitindo comparar 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 cruciais 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 dos usuários.
Os indicadores de satisfação do usuário do sucesso da otimização estavam diretamente visíveis na Google Play Store. Após o lançamento da versão otimizada para R8, a equipe notou uma mudança drástica e positiva no sentimento e no engajamento dos usuários.
Drew Heavner: "Enabling R8's full potential tool less than 2 weeks"
O mais impressionante é que isso foi feito com um esforço concentrado. 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 no Google realizaram comparativos detalhados para confirmar cientificamente os ganhos e testar 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 o R8 e mais duas ferramentas fundamentais de otimização de performance: 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 dos usuários para as máquinas dos desenvolvedores. O código compilado gerado com antecedência (AOT, na sigla em inglês) 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 para construir 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 devem ser incluídos nos primeiros classes.dex arquivos. Essa estrutura permite que o app carregue menos arquivos, o que melhora a velocidade de inicialização.
O Jetpack Macrobenchmark foi a principal ferramenta dessa 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 abria o app, rolava para baixo três vezes e depois rolava para cima.
No final, tudo o que foi necessário para escrever o comparativo foi isto:
uiAutomator {
startApp(REDDIT)
repeat(3) {
onView { isScrollable }.fling(Direction.DOWN) }
repeat(3) {
onView {isScrollable }.fling(Direction.UP)
}
}
Os dados de comparativo confirmaram as observações de campo e forneceram insights mais detalhados. O app totalmente otimizado iniciou 55% mais rápido, e os usuários puderam começar a navegar 18% antes. 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 foi aprimorada, 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")
Como ativar 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 performance 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 performance. O R8 faz modificações substanciais no código, incluindo renomeação, movimentação e remoção de classes, campos e métodos. Se você notar que essas modificações causam erros, especifique quais partes do código o R8 não deve modificar declarando-as em regras de manutenção.
Siga o exemplo do Reddit no seu app
O sucesso do Reddit com o R8 serve como um estudo de caso eficiente 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 destaca o valor da otimização de performance.
Ao seguir o modelo apresentado neste estudo de caso (usando ferramentas como o App Performance Score para identificar oportunidades, ativando todo o potencial de otimização do R8, monitorando dados do mundo real e usando comparativos de mercado para confirmar e aprofundar o entendimento), 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 atualizadas sobre como ativar, configurar e resolver problemas do otimizador R8.
Continuar lendo
-
Estudos de caso
O Monzo é um banco digital do Reino Unido com 15 milhões de clientes e crescendo. À medida que o app escalonava, a equipe de engenharia identificou o tempo de inicialização do app como uma área crítica para melhoria, mas se preocupou com a necessidade de mudanças significativas no codebase.
Ben Weiss • 2 min de leitura
-
Estudos de caso
O TikTok é uma plataforma global de vídeos curtos conhecida pela enorme base de usuários e recursos inovadores.
Ben Trengrove, Ajesh Pai • 2 min de leitura
-
Estudos de caso
No mundo dinâmico das redes sociais, a atenção do usuário é conquistada ou perdida rapidamente. Os apps da Meta (Facebook e Instagram) estão entre as maiores plataformas sociais do mundo e atendem a bilhões de usuários em todo o mundo.
Mayuri Khinvasara Khabya • Leitura de 4 minutos
Fique por dentro
Receba os insights mais recentes sobre desenvolvimento Android na sua caixa de entrada semanalmente.