Postado por Kateryna Semenova, Engenheira de DevRel; Rahul Ravikumar, Engenheiro de software e Chris Craik, Engenheiro de software
Muitos apps encontram correlação entre o desempenho do app e o engajamento dos usuários. As pessoas esperam que os apps sejam responsivos e rápidos de carregar. O tempo de inicialização é uma das principais métricas de qualidade e desempenho dos apps.
Alguns de nossos parceiros já investiram muito em tempo e recursos para otimizar a inicialização de apps. Veja, por exemplo, a história do Facebook.
Nesta postagem do blog, falaremos sobre perfis de referência e como eles melhoram o desempenho de apps e bibliotecas, inclusive o tempo de inicialização, em até 40%. Embora esta postagem do blog tenha como foco a inicialização, é importante destacar que os perfis de referência também melhoram muito a instabilidade.
O Android 9 (API de nível 28) introduziu os perfis de otimização do ART na nuvem do Play para melhorar o tempo de inicialização dos apps. Em média, vemos que as inicializações a frio dos apps são, pelo menos, 15% mais rápidas em inúmeros dispositivos quando os perfis de nuvem estão disponíveis.
Ao iniciar o app pela primeira vez após a instalação ou atualização, o código desse app é executado em modo interpretado até passar pelo compilador JIT. Em um APK, o código Java e Kotlin é compilado como bytecode dex, mas não é totalmente compilado em código de máquina (desde o Android 6) devido ao custo do armazenamento e carregamento de apps totalmente compilados. As classes e os métodos usados com frequência no app e aqueles usados na inicialização do app são gravados em um arquivo de perfil. Assim que o dispositivo entra no modo ocioso, o ART compila os apps com base nesses perfis. Isso acelera as próximas inicializações do app.
A partir do Android 9 (API de nível 28), o Google Play também fornece perfis de nuvem. Quando um app é executado em um dispositivo, os perfis gerados pelo ART são carregados pelo app Play Store e agregados na nuvem. Quando houver um volume suficiente de perfis carregados para um aplicativo, o app Play usará o perfil agregado para as próximas instalações.
Embora os perfis de nuvem sejam excelentes quando estão disponíveis, eles nem sempre estão preparados para uso após a instalação de um app. Coletar e agregar perfis são tarefas que geralmente demoram vários dias, algo problemático quando muitos apps são atualizados semanalmente. Muitos usuários instalam uma atualização antes de o perfil de nuvem ser disponibilizado. A equipe do Google Android começou a procurar por outras formas de melhorar a latência dos perfis.
Os perfis de referência são um novo mecanismo para fornecer perfis que podem ser usados no Android 7 (API de nível 24) e posteriores. Perfil de referência é um perfil do ART gerado pelo Plug-in do Android para Gradle usando um formato de perfil legível para humanos que pode ser fornecido por apps e bibliotecas. Este seria um exemplo:
HSPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I HLandroidx/compose/runtime/ComposerImpl;->validateNodeExpected()V PLandroidx/compose/runtime/CompositionImpl;->applyChanges()V HLandroidx/compose/runtime/ComposerKt;->findLocation(Ljava/util/List;I)I
Exemplo de biblioteca do Compose.
O perfil binário é armazenado em um local específico no diretório de assets do APK (assets/dexopt/baseline.prof).
Os perfis de referência são criados durante o tempo de compilação, fornecidos para o Play como parte do APK e enviados do Play aos usuários quando é feito o download de um app. Eles preenchem as lacunas no pipeline do perfil de nuvem do ART quando os perfis de nuvem ainda não estão disponíveis e se mesclam automaticamente com esses perfis quando eles estão disponíveis.
Este diagrama mostra o fluxo de trabalho do perfil de referência desde a criação até a entrega aos usuários finais.
Um dos maiores benefícios dos perfis de referência é a possibilidade de desenvolvê-los e avaliá-los localmente para que os desenvolvedores possam ver melhorias realistas no desempenho para os usuários finais. Eles são compatíveis com uma versão do Android (7 e posteriores) inferior à versão dos perfis de nuvem, que só estão disponíveis a partir do Android 9.
No início de 2021, o Google Maps passou a ter um ciclo de lançamento de uma semana, e não de duas semanas, como ocorria antes. Com as atualizações mais frequentes, a pré-compilação local era descartada com mais frequência e um número maior de usuários enfrentava lentidão na inicialização sem os perfis de nuvem do Play. Ao usar os perfis de referência, o Google Maps melhorou o tempo médio de inicialização em 30% e observou um aumento correspondente de 2,4% nas pesquisas, um ganho extraordinário para um app já estabelecido como esse.
O código de uma biblioteca é igual ao de um app: por padrão, ele não é totalmente compilado, o que pode ser um problema quando ele exerce uma função significativa no caminho essencial da inicialização.
O Jetpack Compose é uma biblioteca de IUs que não faz parte da imagem do sistema do Android e, portanto, não é totalmente compilada na instalação, diferente de grande parte do código do kit de ferramentas da View do Android. Isso causava problemas de desempenho, principalmente nas primeiras inicializações a frio do app.
Para resolver esse problema, o Compose usa o instalador de perfil. Ele contém regras de perfis de referência que reduzem o tempo de inicialização e a instabilidade nos apps do Compose.
A página de resultados da pesquisa da Google Play Store foi reformulada com o Compose. Após a incorporação das regras de perfis de referência do Compose, houve uma melhoria de aproximadamente 40% no tempo de renderização da página inicial de resultados da pesquisa com imagens.
A equipe do Android também adicionou perfis de referência às bibliotecas relevantes do AndroidX. Isso proporciona benefícios a todos os apps Android que usam essas bibliotecas. O Constraint Layout mostrou que fornecer regras de perfis reduz o tempo para a renderização dos frames de animação em mais de um milissegundo.
Crie um perfil de referência personalizado
Desenvolvedores de apps e bibliotecas podem se beneficiar da inclusão de perfis de referência. O cenário ideal é que os desenvolvedores criem perfis para as jornadas do usuário mais críticas a fim de garantir que elas tenham rápido desempenho de maneira consistente, independentemente de haver perfis de nuvem disponíveis. Confira o guia detalhado sobre como configurar perfis de referência destinados a desenvolvedores de apps e bibliotecas.
Atualize as dependências
Se você ainda não estiver preparado para gerar perfis de referência para o app, ainda poderá se beneficiar deles atualizando as dependências. Você obterá os perfis de referência incluídos no APK que já são fornecidos pelas bibliotecas (como o Jetpack) se usar o Plug-in do Android para Gradle 7.1.0-alpha05 ou mais recente para criar. O Google Play compila o app com esses perfis no momento da instalação. É possível complementar esses perfis como parte da criação do aplicativo.
Meça as melhorias
Não se esqueça de medir as melhorias. Siga os passos para a medição da inicialização com o perfil gerado localmente.
Forneça feedback
Compartilhe seu feedback e conte para nós como foi a sua experiência!
Postar um comentário
Nenhum comentário :
Postar um comentário