front-end

29 jan 2025

Substituindo background-image por <img> no HTML (Parte 2)

No post passado, falei sobre como substituir o uso do background-image pelo uso da tag <img> no HTML, destacando o maior benefício dessa troca: performance.

Agora, vamos elevar o nível e discutir uma técnica complementar: o uso do <link rel="preload"> para carregar as imagens do topo da página (geralmente da primeira seção).

O atributo preload permite que o navegador priorize o carregamento de recursos críticos antes mesmo de eles serem requisitados pelo HTML ou CSS. Falando em imagens, isso é útil para aquelas que ficam na primeira seção da página. Dessa forma, garantimos que elas sejam exibidas o mais rápido possível, reduzindo o Largest Contentful Paint (LCP) e melhorando a performance geral no pagespeed.

Caso real: já fui de uma nota 52 para 89 só puxando três imagens previamente via preload. Então, sim… faz muita diferença!

Ok, mas como funciona o preload?

Ao declarar uma imagem como preload, informamos ao navegador que aquele recurso é essencial e deve ser carregado com alta prioridade. Com isso, o navegador começa a baixar a imagem logo no início, antes mesmo de processar totalmente o CSS ou o DOM.

Em frameworks como Next.js ou Nuxt, que possuem componentes de imagem (<Image /> e <NuxtImg />), esse tipo de otimização é simplificado. No Next.js, por exemplo, basta configurar o atributo priority como true e no Nuxt, basta passar o atributo preload, como mostrado no código da imagem.

Utilizando diretamnte no HTML

<link
  rel="preload"
  href="https://example.com/hero-image.webp"
  as="image"
  type="image/jpeg"
/>

Nuxt

<NuxtImg src="https://example.com/hero-image.webp" alt="Hero image" preload />

Next.js

<NextImg
  src="https://example.com/hero-image.webp"
  alt="Hero image"
  priority={true}
/>

Essas opções informam ao framework que a imagem deve ser carregada com alta prioridade, incluindo a marcação do preload no HTML.

Importante: cuidado com o uso em excesso. Muitas imagens carregadas assim trazem problemas de performance. Uma dica é ficar de olho no pagespeed e seguir com base no report gerado por lá.

Essa técnica, combinada com o uso de atributos como lazy e decoding, cria uma base sólida para uma página rápida e otimizada.