0Pricing
HTML Academy · Aula

Carregamento tardio com IntersectionObserver

Adie o carregamento de imagens e conteúdo até que entrem na área de visualização.

Carregamento tardio com IntersectionObserver é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.

Além de loading="lazy" nativo

O carregamento nativo sob demanda abrange <img> e <iframe>. Para qualquer outra coisa — imagens de fundo, vídeo, componentes dispendiosos e widgets de terceiros — IntersectionObserver é a ferramenta certa para adiar o trabalho até que o elemento esteja próximo da área visível.

O padrão

Marque os elementos adiados com um atributo que contenha a origem real; renderize um marcador minúsculo. Observe cada um; na interseção, substitua a origem adiada pela origem real (ou ative o elemento de outra maneira) e deixe de observá-lo para que a função de retorno nunca seja executada novamente.

<img class="lazy" data-src="/photo.jpg" alt="Photo" width="800" height="600">
<script>
const observer = new IntersectionObserver((entries) => {
  for (const entry of entries) {
    if (entry.isIntersecting) {
      entry.target.src = entry.target.dataset.src;
      observer.unobserve(entry.target);
    }
  }
}, { rootMargin: "200px" });
document.querySelectorAll(".lazy").forEach((img) => observer.observe(img));
</script>

Imagens de fundo carregadas sob demanda

A propriedade de imagem de fundo do CSS não pode ser carregada sob demanda nativamente. Na interseção, defina el.style.backgroundImage = `url("${el.dataset.bg}")` ou adicione uma classe CSS que defina a imagem de fundo. A imagem começa a ser baixada nesse momento.

Vídeo carregado sob demanda

Para vídeos abaixo da dobra, omita inicialmente a origem e os elementos de origem. Na interseção, injete as tags <source> e chame video.load(). Sem isso, os metadados do vídeo podem ser baixados imediatamente, mesmo antes de o usuário rolar para perto do elemento.

Componentes de terceiros

Incorporações de redes sociais, widgets de comentários e scripts de bate-papo podem carregar megabytes. Na interseção, importe dinamicamente o script de configuração do componente: await import("/embed.js"). O custo só é pago quando o usuário realmente rola até a seção.

Iframe carregado sob demanda (além de loading="lazy")

O carregamento nativo sob demanda de iframes ainda baixa o documento do iframe. Para incorporações pesadas, como mapas e reprodutores de vídeo, use o padrão de "fachada": exiba uma imagem substituta; ao clicar ou quando houver interseção, substitua-a pelo iframe real. Isso reduz drasticamente o peso inicial da página.

rootMargin para pré-carregamento

rootMargin: "200px" começa a carregar 200 pixels antes de o elemento entrar na área visível. Ajuste esse valor com base na velocidade de rolagem: se for pequeno demais, os usuários verão marcadores durante rolagens rápidas; se for grande demais, você anulará o objetivo do carregamento sob demanda ao carregar tudo.

unobserve após o acionamento

Sempre execute observer.unobserve(element) depois que o carregamento sob demanda for ativado. Caso contrário, a função de retorno continuará sendo executada sempre que o elemento voltar à área visível — isso desperdiça CPU e pode causar erros se a ativação não for idempotente.

Reserve espaço

Defina a largura e a altura das imagens carregadas sob demanda e uma altura mínima nos contêineres correspondentes. Sem dimensões explícitas, a página é reorganizada à medida que o conteúdo é carregado — isso causa saltos incômodos durante a rolagem e uma pontuação ruim de Deslocamento cumulativo de layout.

Alternativa para ausência de JS

Para obter um Aprimoramento progressivo completo, envolva o elemento carregado sob demanda em <noscript> com a origem real: <noscript><img src="/photo.jpg"></noscript>. Usuários sem JS recebem a imagem imediatamente; usuários com JS recebem a versão carregada sob demanda. Combine isso com uma marcação apropriada de origem de dados.

Agrupamento de muitos elementos

Uma única instância de observador pode monitorar centenas de elementos com eficiência. Não crie um observador por elemento. Crie um observador compartilhado com as opções desejadas e use observe() para registrar cada alvo.

Combinação com loading="lazy" nativo

Para <img> especificamente, use loading="lazy" como mecanismo principal e reserve IntersectionObserver para os casos que o carregamento nativo sob demanda não abrange. Os dois mecanismos se combinam bem: o carregamento nativo cuida das imagens abaixo da dobra; IntersectionObserver cuida de imagens de fundo, componentes e outros carregadores personalizados.

Verificação de conhecimentos

Por que é importante chamar observer.unobserve(element) depois que um elemento carregado sob demanda tiver sido ativado?

Resumo

IntersectionObserver amplia o carregamento sob demanda para além de <img loading="lazy"> nativo, abrangendo imagens de fundo, vídeo, widgets de terceiros e importações dinâmicas de componentes. Use marcadores com a origem adiada, substitua-a na interseção e deixe de observar após a ativação. Pré-carregue com rootMargin, reserve espaço com largura e altura, forneça uma alternativa noscript e combine com o carregamento nativo sob demanda quando aplicável.

Perguntas Frequentes

A aula “Carregamento tardio com IntersectionObserver” é grátis?

Sim — o texto completo de “Carregamento tardio com IntersectionObserver” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.

O que vou aprender em “Carregamento tardio com IntersectionObserver”?

Adie o carregamento de imagens e conteúdo até que entrem na área de visualização. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar HTML Academy?

Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Carregamento tardio com IntersectionObserver”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de HTML Academy?

Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. API IntersectionObserver e limiares
  2. Carregamento tardio com IntersectionObserver
  3. Implementação de rolagem infinita
  4. Configuração de animações vinculadas à rolagem
← Voltar para HTML Academy