Como melhorar a performance em sites legados

Confira algumas dicas e estratégias que ajudarão no carregamento mais rápido

Gil Crespo
gruponewway
4 min readOct 18, 2019

--

Em sites desenvolvidos mais recentemente já é possível ver a tecnologia de webpack o que nos facilita demais a vida, inclusive com várias ferramentas que nos ajudam na hora de colocarmos em produção.

Uma delas é o Webpack Bundle Analyzer que nos ajuda a identificar o quanto tal biblioteca que estamos usando está ocupando do nosso pacote. O que cabe nosso questionamento: será que precisamos importar ela inteira, existem outras alternativas, conseguimos importar somente parte dela?

Webpack Bundle Analyzer: Veja o tamanho de seus pacotes de arquivos através de uma interface interativa

De qualquer forma, nosso foco no artigo são em tecnologias um pouco mais antigas, onde ainda se usavam Grunt, Gulp, Bower, que necessitavam de um maior gerenciamento por parte do dev.

Para isso, o Bundlephobia nos ajuda tentando trazer informações parecidas com a do Webpack Bundle Analyzer, onde é possível informar o package.json facilitando listar toda sua biblioteca.

BundlePhobia analisa o tamanho de cada biblioteca JS (inclusive estimando a versão minificada e GZIP)

Estratégias que adotaremos

  1. Redução do peso do site (kb)
  2. Compactação de imagens
  3. Trabalhe melhor com as fonts
  4. Priorização de algumas bibliotecas JS no carregamento da página
  5. Despriorização de bibliotecas JS no carregamento da página
  6. Reduzir tempo de pesquisa de DNS

1) Redução do peso do site (kb)

Reduzir o tamanho de seu pacote de JS é muito importante. Isso afetará diretamente no tempo em que o browser levará para fazer download do arquivo JS.

O peso do JavaScript se diferencia de uma imagem por ter alguns passos depois do download que custam tempo no carregamento: análise, compilação e execução.

Ao fazer o Uglify no Gulp, método que compacta muito cada arquivo a ponto de não ficar legível a humanos, mas que já vi resultados de redução chegar perto de 70%!

“gulp-uglify-es” tem suporte para implementações a ES5 e ES6

Por isso existe essas verificações constantes de como se reduzir o tamanho do pacote, ou se realmente é necessário usar tal biblioteca.

2) Compactação de imagens

Imagens geradas por editores ou mesmo fotos de máquinas possui muitas informações dentro dela que consomem kb desnecessários (pensando em web).

Para compressões de imagens individuais, algumas ferramentas como Tinyjpg ou Squoosh ajudam para a remoção deste conteúdo sem ao menos perder qualidade. Ou, no caso de imagens ou ícones SVG, recomendo a ferramenta SvgOMG que faz uma compressão customizada fenomenal.

A versão Gulp disso sempre ajuda, no caso o ImageMin pode ser usado desta maneira:

3) Trabalhe melhor com as fonts

Existem dois tipos de fonts normalmente usadas em sites: uma para customização de textos e títulos e a outra usada como recurso para ícones.

Para títulos e textos:

Ao usar esta tag no <head> de seu template, em seu carregamento de página, o navegador fará 3 micro atividades trarão um bom ganho de performance deste recurso.

Falarei com mais detalhes cada forma de priorizar melhor o carregamento no próximo item.

Para ícones:

Neste caso, usar o preconnect como citado acima vai acabar ajudando um pouco, mas recomendo muito a substituição deste recurso por ícones em SVG, conforme explico neste artigo:
https://medium.com/@gilcrespo/usando-sprite-de-ícones-em-svg-802d857c9ab5

4) Priorização de algumas bibliotecas JS no carregamento da página

preload

  • usado para quando precisa usar o recurso o mais rápido possível
  • os tipos de recursos a ser usado para style, script, font e fetch

prefetch

  • ao contrário do preload, é usado para carregamento do recurso mais tardio, usado para prever navegação do usuário para próxima página e antecipar este carregamento de recurso.
  • os tipos de recursos a ser usado para style, script, font e fetch
Exemplo das priorizações de carregamento de recursos

5) Despriorização de bibliotecas JS no carregamento da página

O elemento script com async e defer fazem mais diferença quando eles não estão localizados no final do documento HTML.

Isso ocorre pelo fato de já estar no final da renderização e não ter muito o que bloquear no carregamento, durante sua execução.

Vale a pena prestar atenção pois tem muitas bibliotecas externas que não estão preparadas para ser executadas async e dependem de interação com o DOM. Neste caso, coloque seu carregamento antes do </body> caso tenha problemas.

6) Reduzir tempo de pesquisa de DNS

dns-prefetch

  • resolve o DNS antes do usuário realmente precisar

preconnect

Além de fazer o que o dns-prefetch faz, é feito mais duas micro atividades:

  • resolve o DNS antes do usuário realmente precisar
  • antecipa estabelecimento de conexão com servidor
  • adianta a negociação de privacidade entre as partes caso preciso
Exemplo da resolução de DNS antecipando carregamento

--

--