Três regras para o alto desempenho
Entenda o framework e arquitetura do sistema
Usar uma ferramenta de forma eficiente implica em entender seus componentes e capacidades. Isso permite ter uma base de código saudável desde o começo.Exemplo: a deco oferece componentes comoImage
que ajudam a acelerar a entrega de imagens de forma eficiente, mas nada impede que o usuário continue usando o elementoimg
.
Aprenda a analisar o desempenho
Aprenda a analisar o desempenho das suas páginas. Navegar em uma página não deve ser algo lento, nem mesmo para você. Se está lento para o desenvolvedor, estará para o usuário. Entenda as ferramentas disponíveis e como elas funcionam.Acompanhar o desempenho é uma tarefa contínua
Uma vez que o sistema para de performar, é comum deixar de se importar com este aspecto até que se torne bem mais difícil fazer correções. A detecção de problemas de desempenho é uma tarefa contínua, mas não deve ser um fim por si só.Importante: o mais importante (a regra de ouro) é a experiência do usuário. Por vezes, o sistema pode não entregar o melhor desempenho, desde que isso seja uma decisão consciente para entregar a melhor experiência ao usuário.
Analisando o desempenho de uma página
Testar o desempenho passa por entender uma série de ferramentas e possíveis métricas que buscadm entender o que deve ser melhorado (e como). Existem ferramentas que ajudam neste processo. Entenda como e quando utilizá-las.Testando localmente
Teste de pagespeed
Métrica | Significado | exemplo de bom valor |
---|---|---|
FCP | Tempo até a primeira exibição de conteúdo | até 1,8s |
LCP | Tempo até a maior exibição de conteúdo | até 2,5s |
TBT | Tempo crítico bloqueante até que o usuário possa interagir | 200ms |
Speed Index | Índice do desempenho da página em popular conteúdo | até 3,4 |
CLS | Índice da quantidade de mudanças de layout cumulativa | até 0,1 |
fonte (adaptado)A google agrega essas métricas em um índice entre 0 e 100, gerando a nota do pagespeed. Como é um teste executável em um ambiente em produção, ele é sujeito a variações, no entanto, uma queda abrupta no valor do pagespeed implica em olhar para o desempenho da página o quanto antes.
Teste de métricas deco
Métrica | Significado |
---|---|
Config LCP | Configurações de carregamento do maior conteúdo da página |
Page HTML | Tamanho da página em bytes |
Page Islands | Número de ilhas na páginas |
Islands Props | Tamanho em bytes das propriedades das ilhas |
Loaders latencies | Tempo de resposta dos loaders da página |
100 kb/s
levará 5s
para baixar uma página de
500 kb
. Isto é especialmente impactante para usuários de dispositivos móveis
operando em redes ou situações de baixa capacidade de banda.
Teste do Core Web Vitals
Acesse através do site CrUX da google ou diretamente da App CrUX no seu site deco.Por ser uma métrica coletada, ela só tem significado agregado. A google categoriza os valores tipicamente mês-a-mês, por isso é mais uma métrica de acompanhamento para diagnosticar eventuais problemas de comportamento que passaram desapercebidos ao longo do tempo, ou que refletem a mudança de público da página.
Depurando problemas de performance
Se, no entanto, nenhuma das ferramentas auxiliar no processo de identificação de um problema de desempenho, execute alguns testes manuais que podem identificar a causa do problema:-
Se você não souber que mudança causou uma perda de performance:
- Teste versões antigas do sistema para verificar qual versão impactou no desempenho
-
Caso não esteja claro, dentro de uma versão, o que a torna lenta, elimine
parte do sistema até identificar a causa.
- Para uma página lenta, elimine algumas
sections
, até que a página volte a ter um bom desempenho. Asection
mais recentemente apagada (ou seusloaders
ouilhas
) pode ser a causa do problema. - Elimine dependências que tenha adicionado. Verifique se o sistema melhora com isso.
- Para uma página lenta, elimine algumas
-
Atualize as suas dependências.
- Melhorias de desempenho são constantemente adicionadas ao sistema e podem corrigir problemas que levam a lentidão.
Melhorias de desempenhos
Após identificar um problema, seja por uma experiência negativa ou por alguns dos testes indicarem alguma métrica com valor inadequado, é preciso atuar. Cada teste acima indica, para cada métrica, possíveis culpados e aonde olhar. Caso tenha identificado o culpado, siga um dos guias abaixo para implementar melhorias relacionadas. Observe que as situações em que você deve atuar são só exemplos de alguns casos.🖼️ Imagens (jpg, png, gifs, …)
Quando atuar…- Valor alto de LCP (maior imagem demora a ser baixada / vista)
- Páginas “sambando” na tela
- Grande tamanho das imagens baixadas
Dica: use os componentes deco de imagens, como<Image>
e<Picture>
, e os configure corretamente, incluindo largura e altura.
📈 Imagens (SVG)
Quando atuar…- Tamanho das páginas é grande e as páginas contem SVGs embutidos e repetidos
- Problemas no Speedindex
🖹 Fontes
Quando atuar…- O texto parece “mudar de tamanho” repentinamente
- O arquivo de fonte demora a ser carregado
- Valor alto de FCP (apontando a fonte como problema)
Dica: Use fontes padrão oferecidas pela google. Se preciso use fontes de pouco tamanho (dando preferência a woff/woff2).
📜 Scripts de terceiros
Quando atuar…- O sistema demora a carregar (TBT alto)
- A tela “samba” por causa de um componente inserido por um script terceiro (CLS alto)
- Um script de terceiro é tem um tamanho grande
Dica: Tente só usar o que for extritamente necessário ou substituir scripts de terceiros por versões mais leves. Se não for possível, postergue a execução do script para depois que a página já estiver carregado e o usuário estiver interagindo com ela.
🔄 Eficiência no carregamento de dados (loaders)
Quando atuar…- O sistema indica alta latência de um loader
- A página demora a carregar inicialmente
- O tamanho das props em ilhas é grande
Dicas:
- Use
inline loaders
para transformar dados a serem enviados a uma section e/ou ilha- Considere postergar a exibição (
Deferred
) de sections com loaders custosos- Altere as props do loader para diminuir a quantidade de dados carregados nos loaders
- Salve os loaders que são reutilizados em diferentes páginas/sections
🏝️ Ilhas
Quando atuar…- O sistema indica um grande número de ilhas
- A página demora a carregar inicialmente
- O tamanho das props em ilhas é grande
Dicas: Prefira CSS puro para evitar ilhas. Utilizechildren
para passar um JSX para dentro de uma ilha. Reduza o máximo possível o escopo da ilha (ex.: prefira um botão como ilha, do que todo umform
).