Por design, os estilos operam na fase de layout e exibição do Compose. Isso evita a necessidade de criar modificadores baseados em lambda, já que o Styles sempre pula a fase de composição.
As melhorias de performance em relação aos modificadores vêm de três otimizações principais:
- Mudança de fase: os estilos geralmente têm como alvo a fase de extração. Quando um valor muda, o Compose invalida apenas a fase afetada (por exemplo, Redraw) em vez de acionar uma recomposição ou um novo layout completo.
- Alocação lenta: os estilos adiam a alocação de recursos de animação até que uma animação seja iniciada. Isso reduz o trabalho necessário durante a composição inicial.
- Redução da sobrecarga de objetos: modificadores encadeados alocam um objeto para cada propriedade (por exemplo, padding, border). Os estilos usam uma única lambda para aplicar várias propriedades, reduzindo significativamente as alocações de memória. Se um estilo for definido em um tema, essa lambda será compartilhada entre todos os componentes que usam esse tema.
A tabela a seguir mostra resultados ilustrativos de comparativos de desempenho internos para o Compose 1.11.0-alpha06 do Styles, em comparação com uma implementação no Compose sem Styles.
O teste basic_box_border_change destaca a força do sistema de estilo ao evitar a alocação de vários objetos modificadores durante atualizações de propriedades, resultando em uma redução enorme de aproximadamente 77% nas alocações e de aproximadamente 59% no tempo.
Método de teste |
Descrição |
Mudança de horário |
Mudança na alocação |
Alterna a cor da borda de um |
-59,91% |
-77,22% |
|
Compara estados de passar o cursor/foco/pressionar com base no estilo e a coleta manual de estados de interação. |
-5,24% |
-14,72% |
|
Mede a composição inicial e o layout de um |
-4,78% |
-6,60% |
|
Renderiza cinco componentes |
+0,62% |
+2,41% |
|
Compara a definição da cor do texto usando um estilo e usando |
+5,86% |
+9,82% |