Prefácio
Já se passaram alguns anos desde que o Android Jetpack Compose fez sua estreia na conferência Google I/O em 2019 e lançou a versão estável 1.5.1 em setembro de 2023, mas o desempenho do Compose ainda é criticado pelos desenvolvedores hoje.
Este artigo é principalmente para satisfazer a curiosidade do autor. A propósito, usarei a ferramenta Perfetto para testá-la com todos. A versão 1.5.1 recém-lançada realmente melhorou em desempenho conforme declarado oficialmente?
Preparação
- AndroidStudio:Android Studio Girafa | 2022.3.1 Atualização 1
- Um celular Google Pixel 4: equipado com sistema Android 12, ative as opções do desenvolvedor, ative o modo de apresentação HWUI, selecione para exibir como um gráfico de barras na tela e ative a taxa de atualização do display;
- Um aplicativo de lista implementado usando o componente Android Jetpack Compose LazyColumn, integrando o assistente de desenvolvimento DoKit de código aberto da Didi.
Alvo de teste
Compare o desempenho do componente LazyColumn das versões 1.4.1 e 1.5.1 do Android Jetpack Compose . Na verdade, a partir da versão 1.3.0, o Compose reconstruiu o sistema Modifier e introduziu o Modifier.Node como um substituto de alto desempenho para o Modifier.composed.No entanto, esse processo não acontece da noite para o dia e leva tempo para concluir gradualmente a substituição. Devido ao tempo e energia limitados, o autor não testará e comparará outras versões como a 1.3.0.
Lembrete: o Android recomenda oficialmente que usemos a lista de materiais (BoM) do Compose para gerenciar todas as versões da biblioteca do Compose, especificando a versão da BoM. Clique aqui para visualizar a
tabela de correspondência entre as versões da BOM e da biblioteca Compose . 1.4.1 corresponde a 2023.04.01, 1.5.1 corresponde a 2023.09.00
Etapas de teste
- Escreva um script Shell e use o comando adb shell swipe para simular o deslizamento constante para frente e para trás na interface do componente LazyColumn;
- Utilize o script auxiliar record_android_trace fornecido oficialmente pela Perfetto para registrar o arquivo de rastreamento, que dura cerca de 10 segundos e é gravado 10 vezes para cada versão;
- Use o Perfetto UI para abrir o arquivo de rastreamento gravado, registrar e contar os dados do indicador android_frame_timeline_metric e resumi-los em uma tabela;
A interface do componente LazyColumn não é muito complicada e é um código copiado do projeto oficial do Jetchat. Olhando para a animação, você pode ver que a taxa de atualização da tela e a taxa de quadros do DoKit no canto superior esquerdo não mudaram.
Dados de teste
Obtenha dados do indicador android_frame_timeline_metric usando Perfetto e resuma-os (medidos 10 vezes a cada 10 segundos), onde total_frames é o número total de frames do aplicativo, Missed_frames é o número de frames descartados do aplicativo e fps é a taxa de quadros = total_frames /tempo (segundos)
Talvez o método de teste não seja muito razoável (mas é muito conveniente testar com scripts).Se houver uma maneira melhor, fique à vontade para me dar seu conselho.
Android Jetpack Compose 1.4.1
Uma captura de tela da parte dos dados de teste é a seguinte:
Dados do indicador android_frame_timeline_metric
cronograma do processo
Resumo dos dados medidos 10 vezes durante 10 segundos de cada vez:
número de série | total_frames | quadros_perdidos | FPS |
---|---|---|---|
1 | 787 | 49 | 78,7 |
2 | 774 | 45 | 77,4 |
3 | 777 | 50 | 77,7 |
4 | 787 | 48 | 78,7 |
5 | 788 | 52 | 78,8 |
6 | 798 | 43 | 79,8 |
7 | 778 | 48 | 77,8 |
8 | 794 | 46 | 79,4 |
9 | 777 | 50 | 77,7 |
10 | 783 | 50 | 78,3 |
quadros médios | Número médio de quadros perdidos | Média de frames perdidos por segundo | taxa média de quadros | Taxa média de perda de quadros |
---|---|---|---|---|
784,3 | 48,1 | 4,81 | 78,4 | 5,77% |
Nota: Taxa média de perda de quadros = número médio de quadros perdidos / (número médio de quadros + número médio de quadros perdidos)
Android Jetpack Compose 1.5.1
Uma captura de tela da parte dos dados de teste é a seguinte:
Dados do indicador android_frame_timeline_metric
cronograma do processo
Resumo dos dados medidos 10 vezes durante 10 segundos de cada vez:
número de série | total_frames | quadros_perdidos |
---|---|---|
1 | 807 | 30 |
2 | 825 | 23 |
3 | 825 | 19 |
4 | 832 | 13 |
5 | 840 | 8 |
6 | 830 | 13 |
7 | 838 | 8 |
8 | 842 | 7 |
9 | 846 | 10 |
10 | 837 | 8 |
quadros médios | Número médio de quadros perdidos | Média de frames perdidos por segundo | taxa média de quadros | Taxa média de perda de quadros |
---|---|---|---|---|
832,3 | 13,9 | 1,39 | 83,2 | 1,64% |
Nota: Taxa média de perda de quadros = número médio de quadros perdidos / (número médio de quadros + número médio de quadros perdidos)
Comparação de dados
Compor versão | quadros médios | Número médio de quadros perdidos | Média de frames perdidos por segundo | taxa média de quadros | Taxa média de perda de quadros |
---|---|---|---|---|---|
1.4.1 | 784,3 | 48,1 | 4.18 | 78,4 | 5,77% |
1.5.1 | 832,3 | 13,9 | 1,39 | 83,2 | 1,64% |
Obviamente, usando o mesmo modelo e o mesmo código de teste, 1.5.1 tem uma taxa de quadros mais alta e menos quedas de quadros do que 1.4.1. Embora não se possa dizer que esteja muito à frente, é de fato uma melhoria significativa e também é óbvio quando comparado à Linha do Tempo.
Nota: Você pode pensar que o curto tempo de teste ou o pequeno número de testes resulta em dados amostrais excessivamente pequenos, mas na verdade, o autor descobriu depois de muitos testes (estendendo o tempo e aumentando o número de testes) que a lacuna de dados entre o duas versões são basicamente Este é quase o caso do Google Pixel 4 com sistema Android 12. Devido a limitações de espaço, não mostramos muitos dados. Amigos que estiverem interessados e tiverem tempo podem testar sozinhos. Se possível, adicione mais versões e modelos para comparação.
para concluir
Devido a limitações no modelo de teste, tempo e energia, este teste não é rigoroso e os dados do teste são apenas para referência. No entanto, esses pequenos dados de amostra ainda podem ser usados para responder às questões levantadas no início deste artigo:
O desempenho do Android Jetpack Compose 1.5.1 foi significativamente melhorado e a experiência é mais suave. Recomenda-se que todos atualizem rapidamente.
Como dizem os funcionários do Android, o Android Jetpack Compose funciona muito e o desempenho está cada vez melhor.
O que? Ainda não usou o Jetpack Compose? Isso não é importante. Os programadores também devem aprender a sair da perspectiva técnica e examinar a vida de uma perspectiva mais macro. A vida dura apenas algumas décadas. Valorize o presente, abrace o futuro e acompanhe as mudanças.
grato
- Graças à iteração contínua do Jetpack Compose do Android , que nos permite continuar avançando
- Obrigado ao Perfetto pelo script auxiliar
- Graças ao assistente de desenvolvimento de APP de código aberto DoKit de Didi
- Obrigado a Wen Xinyiyan ChatGPT pela ajuda
- Agradecimentos a fundroid , Guge E e FunnySaltyFish por publicarem um artigo introdutório sobre o Jetpack Compose 1.5