Resumo
Para reutilizar elementos SVG e diminuir o tamanho do HTML de páginas:
- Use um arquivo único SVG (ex.:
sprites.svg
) e identifique cada símbolo com um“id`.- Para usar o SVG, utilize a tag
use
apontando pra o ID específico- Faça isso especialmente para os SVG que não estão visíveis em tela.
SVG
SVG (Scalable Vector Graphics, ou Vetores Gráficos Escaláveis) é um formato gráfico comumente utilizando em aplicações para representar ícones, logomarcas ou elementos que precisam ser escalados sem perder qualidade. Contudo, o seu uso pode impactar negativamente a performance de uma página web em diversas métricas, como: tempo de carregamento da página (speed index), tempo para exibir o primeiro conteúdo visível (FCP), tempo para exibir o último conteúdo visível (LCP).A técnica SVG Sprites
SVG sprites consiste em você ter um arquivo svg que seja cacheável e acessível pela internet (exemplo: na sua pastastatic
), e nele tenha as as símbolos de
cada svg utilizando a tag <symbol>
e adicionando a propriedade id
em cada um
dos elementos que deseja utilizar.
Segue um exemplo de arquivo svg com um símbolo e id XMark
SVG Sprites para melhorar a performance do seu site
Para utilizar um svg que está dentro de um arquivo, é possível referencia-lo através do endereço do arquivo e do id do símbolo que foi definido no arquivo através da tag<use>
.
Segue um exemplo:
Digamos que o nome do arquivo svg é icons.svg
e ele está disponível no path
example.com/icons.svg
Quando utilizar a técnica?
⚠️ Não é sempre adequado utilizar a técnica, porém é sempre válido testá-la.Considerando que existirá um ou vários arquivos svgs, com o intuito de melhorar a performance do seu site e manter uma ótima usabilidade, é sugerido que utilize desta abordagem nos seguintes casos:
- SVG não é visível na tela inicial do usuário (não está no “above the fold”)
- SVG é exibido através de interação do usuário na página, por exemplo: hover, dentro de dialogs, ao clicar em botões
- No caso de aplicações que utilizam jsx ou afins, que é o caso do Fresh, pois a quantidade de Javascript gerado por SVG é consideravelmente grande.