Lazy Loading e Otimização de Imagens para Alta Performance

Quando desenvolvemos aplicações web, desempenhoDebugging e Ferramentas de Desenvolvimento do NavegadorDebugging e Ferramentas de Desenvolvimento do NavegadorAprenda a depurar código JavaScript com as Ferramentas do Navegador. Use console, breakpoints e debugger para solucionar bugs de forma prática. e eficiência são fatores cruciais para uma boa experiência do usuário. Um site lento pode desmotivar visitantes e impactar até mesmo a taxa de conversão em projetos e-commerce. Pensando nisso, duas estratégias que ganham destaque são o Lazy Loading e a Otimização de Imagens.

Neste tutorial, vamos explorar como essas técnicas podem contribuir para reduzir o tempo de carregamento das páginas, economizar dados de rede e melhorar o desempenho geral de sites e aplicações que utilizam JavaScriptIntrodução ao JavaScript e Configuração do AmbienteIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente..

O que é Lazy Loading?🔗

O Lazy Loading (ou carregamento preguiçoso) é uma técnica em que determinados recursos - como imagens ou conteúdo pesado - são carregados apenas quando necessários. Em vez de carregar todas as imagens de uma página logo no primeiro acesso, o que muitas vezes é desnecessário, o Lazy Loading faz uso inteligente do scrollOverflow e Controle de ConteúdoOverflow e Controle de ConteúdoAprenda a controlar a propriedade overflow em CSS, dominando rolagem, ocultação de conteúdo e textos longos para layouts responsivos e acessíveis. do usuário ou de algum eventoEventos no JavaScript: onClick, onChange e maisEventos no JavaScript: onClick, onChange e maisDescubra como os eventos em JavaScript, como onClick e onChange, possibilitam interações dinâmicas e melhoram a experiência do usuário em páginas web. que indique que aquele recurso deve aparecer em tela.

Vantagens do Lazy Loading

Como Implementar Lazy Loading🔗

Há maneiras variadas para implementar Lazy Loading de imagens, desde soluções nativas nos navegadores mais modernos até abordagens manualmente configuradas via JavaScriptIntrodução ao JavaScript e Configuração do AmbienteIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente..

Atributo "loading" em Imagens (Solução Nativa)

Alguns navegadores suportam o atributo loading="lazy" diretamente na tagTags e Elementos: Sintaxe e HierarquiaTags e Elementos: Sintaxe e HierarquiaDescubra os fundamentos do HTML: aprenda sobre tags, elementos, hierarquia e boas práticas para criar páginas bem estruturadas e acessíveis. <img>. Com isso, o navegador cuida de carregar a imagem somente quando ela estiver próxima de entrar na área visível.

Exemplo simples em HTMLO que é HTML? Fundamentos, História e Evolução da LinguagemO que é HTML? Fundamentos, História e Evolução da LinguagemDescubra a origem e evolução do HTML, entendendo sua importância na estrutura da web e como influenciou o desenvolvimento digital moderno.:

<img
  src="caminho/da/imagem.jpg"
  alt="Exemplo de Imagem"
  loading="lazy"
/>

Prós:

  • Extremamente simples de implementar.
  • Não requer bibliotecas adicionais ou scripts extras.

Contras:

  • Nem todos os navegadores antigos suportam esse atributo.

Intersection Observer (Abordagem com JavaScript)

Para navegadores que ainda não suportam o loading="lazy", ou para um maior controle no processo de carregamento, podemos utilizar a APIConsumindo APIs com Fetch e AxiosConsumindo APIs com Fetch e AxiosDescubra como integrar APIs com Fetch e Axios em JavaScript. Aprenda a fazer requisições HTTP, tratar erros e usar métodos GET e POST com exemplos práticos. Intersection Observer.

Passos:

1. Colocamos um atributo especial em imagens, como data-srcInserindo Imagens: `<img>`, Formatos, `alt` e `title`Inserindo Imagens: `<img>`, Formatos, `alt` e `title`Aprenda a inserir imagens em HTML utilizando a tag <img> com foco em acessibilidade e performance, explorando atributos, formatos e melhores práticas., contendo o caminho verdadeiro da imagem.

2. O srcInserindo Imagens: `<img>`, Formatos, `alt` e `title`Inserindo Imagens: `<img>`, Formatos, `alt` e `title`Aprenda a inserir imagens em HTML utilizando a tag <img> com foco em acessibilidade e performance, explorando atributos, formatos e melhores práticas. inicial pode ser uma imagem de placeholder leve ou mesmo vazio.

3. Criamos um IntersectionObserver no JavaScriptIntrodução ao JavaScript e Configuração do AmbienteIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente. para ficar “observando” quando essas imagens entram na área visível da janela.

4. Ao detectar a visibilidade, trocamos o srcInserindo Imagens: `<img>`, Formatos, `alt` e `title`Inserindo Imagens: `<img>`, Formatos, `alt` e `title`Aprenda a inserir imagens em HTML utilizando a tag <img> com foco em acessibilidade e performance, explorando atributos, formatos e melhores práticas. pela URL real encontrada em data-srcInserindo Imagens: `<img>`, Formatos, `alt` e `title`Inserindo Imagens: `<img>`, Formatos, `alt` e `title`Aprenda a inserir imagens em HTML utilizando a tag <img> com foco em acessibilidade e performance, explorando atributos, formatos e melhores práticas..

Exemplo de uso em JavaScriptIntrodução ao JavaScript e Configuração do AmbienteIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente.:

const images = document.querySelectorAll('img[data-src]');
const options = {
  root: null,   // Usamos a janela como viewport
  threshold: 0.1
};
function handleIntersection(entries, observer) {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      observer.unobserve(img);
    }
  });
}
const observer = new IntersectionObserver(handleIntersection, options);
images.forEach(img => {
  observer.observe(img);
});

Dessa forma, apenas quando a imagem está prestes a aparecer, fazemos a troca efetiva do srcInserindo Imagens: `<img>`, Formatos, `alt` e `title`Inserindo Imagens: `<img>`, Formatos, `alt` e `title`Aprenda a inserir imagens em HTML utilizando a tag <img> com foco em acessibilidade e performance, explorando atributos, formatos e melhores práticas., otimizando substancialmente o carregamento total da página.

Otimização de Imagens🔗

Além do Lazy Loading, otimizar efetivamente o tamanho e o formato das imagens garante uma experiência muito mais rápida e leve. Afinal, não adianta carregar as imagens sob demanda se elas ainda estão grandes ou pesadas.

Escolha do Formato

Selecione um formato de imagem apropriado de acordo com o conteúdo:

FormatoQuando UsarObservações
JPEGFotos ou imagens ricas em cores e detalhesMaior compressão com menor perda de qualidade
PNGImagens com transparência e poucos detalhes de corTamanho maior, mas mantém transparências
WebPAlternativa mais recente, com melhor compressão e suporte a transparênciaNem todos os navegadores antigos suportam
AVIFFormato ainda mais moderno que combina alta compressão com qualidadeSuporte ainda em evolução

Compressão e Ferramentas

É comum usar ferramentas para diminuir o peso das imagens, muitas vezes sem perda visível na qualidade. Exemplos de serviços e bibliotecas populares:

Redimensionamento e Resolução

Ajustar o tamanho das imagens para exatamente o necessário ajuda a evitar downloads desnecessários. Se o layout tem espaço de 800px de larguraSeletores e Propriedades CSS EssenciaisSeletores e Propriedades CSS EssenciaisAprenda a dominar o CSS com nosso tutorial completo: entenda seletores, propriedades essenciais e técnicas para criar layouts modernos e atrativos. para uma imagem, não há motivo para carregar uma versão de 4000px.

Boas Práticas e Dicas Gerais🔗

Conclusão🔗

A implementação de Lazy Loading e a Otimização de Imagens representam um passo fundamental no caminho para melhorar o desempenhoDebugging e Ferramentas de Desenvolvimento do NavegadorDebugging e Ferramentas de Desenvolvimento do NavegadorAprenda a depurar código JavaScript com as Ferramentas do Navegador. Use console, breakpoints e debugger para solucionar bugs de forma prática. das aplicações web. Além de reduzir o tempo de carregamento inicial, essas técnicas também aprimoram a experiência do usuário e contribuem para economizar recursos de rede.

Tanto as abordagens nativas (loading="lazy") quanto o uso da Intersection Observer APIConsumindo APIs com Fetch e AxiosConsumindo APIs com Fetch e AxiosDescubra como integrar APIs com Fetch e Axios em JavaScript. Aprenda a fazer requisições HTTP, tratar erros e usar métodos GET e POST com exemplos práticos. são caminhos sólidos para lidar com problemas de performanceDebugging e Ferramentas de Desenvolvimento do NavegadorDebugging e Ferramentas de Desenvolvimento do NavegadorAprenda a depurar código JavaScript com as Ferramentas do Navegador. Use console, breakpoints e debugger para solucionar bugs de forma prática. relacionados a imagens. Paralelamente, a compressão e o uso de formatos adequados potencializam ainda mais esses ganhos. Ao adotar essas práticas em seu projeto, você torna suas páginas mais eficientes, rápidas e agradáveis para quem as acessa.

Dica: Mantenha um fluxo constante de análise de métricas e testes A/B para confirmar se as estratégias estão realmente elevando a satisfação do usuário e reduzindo os tempos de carregamento.

Com isso, você estará no caminho certo para liberar todo o potencial do seu site em termos de performanceDebugging e Ferramentas de Desenvolvimento do NavegadorDebugging e Ferramentas de Desenvolvimento do NavegadorAprenda a depurar código JavaScript com as Ferramentas do Navegador. Use console, breakpoints e debugger para solucionar bugs de forma prática. e otimização.

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados