Back home

SwiftUI Series 13|Otimização de desempenho do SwiftUI: métodos de escrita que facilmente fazem com que a página fique presa

Muitos problemas de desempenho do SwiftUI são causados ​​pela granularidade do estado, tempo de cálculo e escopo de atualização da visualização ficando fora de controle

Quando se trata do desempenho do SwiftUI, dois julgamentos extremos aparecem com mais frequência:

  • “SwiftUI é inerentemente lento”
  • “SwiftUI está absolutamente bem, mas não consigo escrever”

Ambas as afirmações são demasiado grosseiras.

Em projetos reais, muitos problemas de desempenho do SwiftUI são de fato causados por essas coisas que ficam fora de controle juntas:

  • A granularidade da atualização de status é muito grande
  • A hierarquia de visualização é muito profunda
  • O cálculo é colocado no caminho atualizado com frequência
  • Os custos de links de listas e imagens são muito altos

Então o que você realmente precisa perguntar é:

Uma pequena alteração na página está causando recálculo e redesenho muito maiores do que o necessário?

1. A causa raiz mais comum dos problemas de desempenho do SwiftUI é que o escopo da atualização é muito grande

Muitas páginas estão travadas. Superficialmente, parece que um determinado componente é pesado, mas na realidade está mais próximo:

  • Uma mudança de estado local
  • mas permite que uma grande área da interface participe novamente dos cálculos

Isto é especialmente importante em UIs declarativas. Porque diz “recalcular a descrição atual após a mudança de status”.

Se os limites do estado e dos componentes não estiverem alinhados, pequenas mudanças se transformarão em atualizações em grande escala.

2. Colocar cálculos de alto custo no caminho atualizado com frequência é um dos maus cheiros mais comuns.

Por exemplo:

  • Faça formatação complexa em body
  • Faça conversões pesadas de dados durante a construção da visualização
  • Reconstrua modelos de exibição complexos sempre que atualizar

Essas coisas não são visíveis quando a quantidade de dados é pequena. Depois que a página for atualizada com frequência, o custo será rapidamente ampliado.

3. Listas e imagens quase sempre amplificam os problemas de desempenho do SwiftUI

Porque ambos os cenários permitirão:

  • Maior frequência de atualização
  • Mais visualizações
  • A linha principal está sob maior pressão

Se a granularidade do estado não for suficientemente boa, a página eliminará facilmente os frames.

4. Conclusão: A página SwiftUI fica travada, o que geralmente está relacionado à perda de granularidade de atualização, tempo de cálculo e limites de visualização.

Para resumir, eu diria:

As causas mais comuns dos problemas de desempenho do SwiftUI são permitir que as mudanças de estado afetem demais o escopo, permitindo que cálculos de alto custo ocorram em caminhos de atualização de alta frequência e não fechando os limites da página.

Portanto, a direção de otimização verdadeiramente eficaz é geralmente estreitar o escopo de influência, em vez de duvidar de toda a estrutura desde o início.

FAQ

What to read next

Related

Continue reading