Um vídeo abaixo da primeira tela pode baixar player, fontes, imagens, analytics e o próprio arquivo de mídia antes de a pessoa chegar perto dele. Um mapa ou post incorporado faz algo parecido dentro de um documento separado.
Esse custo compete com CSS, imagem hero e JavaScript da página. Também pode ocupar a thread principal e deslocar o layout quando o embed finalmente aparece.
A correção depende de três perguntas: a mídia está visível no carregamento, precisa tocar sem ação e pertence ao seu servidor ou a um terceiro?
Identifique o tipo de mídia e seu custo
Separe os elementos antes de alterar atributos.
| Tipo | Exemplo | Custo inicial comum | Estratégia inicial |
|---|---|---|---|
| vídeo próprio | demonstração em MP4 ou WebM | poster, metadados e mídia | controlar preload |
| vídeo externo | player incorporado | iframe, scripts e imagens | fachada até o clique |
| iframe funcional | mapa, agenda ou formulário | documento e subrecursos | loading="lazy" fora da tela |
| animação decorativa | loop silencioso | mídia contínua | reduzir ou remover no mobile |
Na aba Network, filtre por Media, JS, Img e Doc. Agrupe por domínio e recarregue com o cache desativado. Depois grave o painel Performance para ver se o player cria tarefas longas.
O material do web.dev sobre lazy loading de imagens e iframes lembra que cada iframe é um documento com seus próprios subrecursos. Adiar o documento também adia boa parte dessa cadeia.
Não aplique a mesma regra acima e abaixo da dobra
Mídia visível na primeira tela faz parte do caminho crítico. Se o poster ou o vídeo define o LCP, loading="lazy" pode atrasar o recurso até o navegador calcular o layout.
Para uma mídia que aparece no topo:
- inclua o elemento no HTML inicial;
- reserve largura e altura;
- use um poster leve e representativo;
- não aplique lazy loading ao candidato de LCP;
- meça se o poster ou outro elemento define a métrica;
- evite autoplay quando ele não é parte essencial da experiência.
O guia de LCP da imagem hero mostra como separar descoberta, download e atraso de renderização. O mesmo raciocínio vale quando um poster é o maior elemento da tela.
Para conteúdo abaixo da dobra, adie a rede. A pessoa não deve baixar um player que talvez nunca veja.
Controle vídeos próprios com preload
O atributo preload é uma pista para o navegador. Ele não é uma ordem e pode variar entre implementações.
<video controls preload="none" poster="/assets/demo-poster.avif" width="1280" height="720"> <source src="/assets/demo.webm" type="video/webm" /> <source src="/assets/demo.mp4" type="video/mp4" /></video>preload="none" pede que o navegador não antecipe dados do vídeo. O poster ocupa a área até a reprodução. preload="metadata" pode buscar duração e dimensões, mas ainda transfere parte do arquivo.
A referência do elemento video no MDN documenta três valores: none, metadata e auto. Ela também ressalta que autoplay tem precedência sobre preload.
Escolha conforme a intenção:
- use
nonequando o vídeo está abaixo da dobra ou poucas pessoas dão play; - avalie
metadataquando duração e resposta rápida ao play importam; - evite
autoem vídeos longos sem evidência de reprodução frequente; - não use autoplay para contornar uma decisão de produto sobre carregamento.
Teste o primeiro play em rede lenta. Economizar o carregamento inicial e criar uma espera sem feedback no clique também é uma regressão.
Use poster com dimensões estáveis
Sem poster, o navegador pode mostrar uma área vazia até receber o primeiro frame. Sem proporção reservada, o conteúdo abaixo se move quando a mídia ganha tamanho.
.demo-video { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; background-color: #171517;}Mantenha width e height no HTML e ajuste a largura responsiva no CSS. A proporção deve corresponder ao arquivo e ao poster.
Comprima o poster como qualquer imagem editorial. Não exporte um frame 4K para uma caixa de 640 pixels. O guia de otimização de imagens cobre srcset, formatos e tamanho exibido.
Depois percorra larguras próximas aos breakpoints. O artigo sobre layout shifts mostra como confirmar se a mídia preserva espaço antes e depois do carregamento.
Adie iframes fora da primeira tela
Para um mapa, formulário ou embed abaixo da dobra, comece com o recurso nativo.
<iframe src="https://example.com/embed" title="Demonstração do produto" loading="lazy" width="1280" height="720"></iframe>loading="lazy" adia o documento até ele chegar a uma distância calculada da área visível. O valor padrão é eager, que inicia a carga na abertura da página.
O atributo reduz o custo inicial, mas o embed ainda pode começar antes de entrar na tela. O navegador escolhe a distância para evitar que a pessoa chegue a uma caixa vazia.
Preserve title para identificar o iframe, defina dimensões e teste o fallback. Lazy loading não corrige um player pesado depois que ele entra na região de carga.
Se o iframe executa conteúdo que você não controla, revise também os limites de iframe sandbox. Performance e permissão são problemas diferentes.
Troque players externos por uma fachada
Uma fachada mostra um poster e um botão reais. O iframe só entra no DOM depois do clique.
<button class="video-facade" type="button" aria-label="Reproduzir demonstração"> <img src="/assets/demo-poster.avif" alt="Prévia da demonstração do produto" width="1280" height="720" /> <span aria-hidden="true">▶</span></button>const facade = document.querySelector(".video-facade");
facade?.addEventListener( "click", () => { const frame = document.createElement("iframe"); frame.src = "https://example.com/embed?autoplay=1"; frame.title = "Demonstração do produto"; frame.allow = "autoplay; fullscreen"; frame.allowFullscreen = true; frame.width = "1280"; frame.height = "720"; facade.replaceWith(frame); }, { once: true },);O botão precisa funcionar com teclado, mostrar foco e ter nome acessível. O poster deve continuar com dimensões iguais às do iframe para evitar movimento.
Se o JavaScript falhar, ofereça um link para abrir o vídeo ou a função em outra página. Não deixe uma imagem que parece clicável sem destino.
A fachada é especialmente útil quando poucas visitas reproduzem o conteúdo. Quem não dá play não baixa o player nem seus subrecursos.
Trate autoplay como custo recorrente
Vídeos decorativos em loop podem parecer leves em uma conexão rápida. Em celular, eles consomem dados, decodificação, bateria e tempo de GPU durante a permanência na página.
Se o movimento for necessário:
- remova a faixa de áudio;
- use
muted,loopeplaysinline; - exporte resolução e bitrate próximos ao tamanho exibido;
- pause quando o elemento sair da tela;
- forneça poster;
- respeite
prefers-reduced-motion; - substitua por imagem estática em telas ou redes onde o custo não se paga.
Não esconda controles em um vídeo que transmite informação. Legendas, pausa e alternativa textual fazem parte do conteúdo, não da decoração.
Evite conexões antecipadas sem uso provável
Um embed externo pode abrir várias origens. Não copie todos esses domínios para uma lista de preconnect.
Se o iframe só carrega no clique, antecipar conexões durante o carregamento devolve parte do custo que a fachada removeu. Meça a espera entre clique e player pronto. Só antecipe a origem principal quando o atraso observado justificar a conexão.
Use hints apenas depois de identificar o ponto real do waterfall. Preload e preconnect antecipam trabalhos diferentes e podem disputar rede com o conteúdo principal.
Teste interação, rede e layout
Monte uma matriz com pelo menos estes cenários:
| Cenário | O que observar |
|---|---|
| celular em rede lenta | bytes antes do scroll e espera no play |
| desktop sem cache | ordem de poster, CSS e iframe |
| teclado | foco e ativação da fachada |
| JavaScript bloqueado | link ou fallback disponível |
| movimento reduzido | vídeo decorativo parado |
| embed indisponível | restante da página funcional |
Compare o waterfall antes e depois. Conte quantas requisições desaparecem do carregamento inicial, quanto o documento principal ganha e quando o custo volta depois da interação.
Uma boa mudança não esconde o custo do relatório. Ela move mídia opcional para o momento certo sem prejudicar quem decide usá-la.
Republique todos os arquivos juntos
No Site no Ar, HTML, poster e arquivos de vídeo referenciados precisam existir dentro de public/ na mesma Version.
- chame
get_contextno Site existente; - localize a rota, os posters e as mídias com as file tools;
- ajuste markup, estilos e scripts;
- adicione ou substitua os assets usados pela página;
- mantenha
public/sitemap.xmlcorreto; - rode build, teste de teclado e a matriz de rede;
- use
deploye acompanhedeploy_status; - abra a URL final e repita o teste sem cache.
A documentação de Publicação explica o contrato de public/ e Versions. Um poster referenciado fora desse diretório não entra no endereço publicado.
Prompt para revisar vídeos e iframes
Revise vídeos e iframes desta landing page sem publicar ainda.
URL e Version: [URL e commit]Mídias esperadas: [lista]Cenários: [celular, desktop, teclado e movimento reduzido]
1. Liste vídeos, iframes, posters, players e origens iniciadas.2. Meça requisições, bytes e tarefas antes do primeiro scroll.3. Separe mídia visível no carregamento de conteúdo abaixo da dobra.4. Aplique preload e lazy loading conforme a posição real.5. Proponha fachada para embeds que só precisam carregar no clique.6. Preserve proporção, foco, controles, legendas e fallback.7. Rode build e compare rede, LCP, INP e CLS na URL final.Vídeo e iframe não precisam sair da página. Precisam deixar de carregar como se toda visita fosse assistir, abrir o mapa ou usar o widget imediatamente.
