Hospedagem de Sites Profissional e de Alta Performance

Evite Scripts Bloqueantes: Melhore o Tempo de Carregamento

Table of Contents

Evite Scripts Bloqueantes: Melhore o Tempo de Carregamento

Corte bloqueios de renderização. Priorize o necessário. Entregue velocidade real.

1) Por que scripts bloqueiam e pioram métricas

  • Scripts no <head> sem defer/async param a renderização.
  • JS grande atrasa FCP e LCP. Aumenta TTFB percebido.
  • Terceiros (tags, chat, pixel) somam latência e CPU.

2) Use defer e async corretamente

&lt;!-- Padrão recomendado para scripts da página --&gt;
&lt;script src="/js/app.js" defer&gt;&lt;/script&gt;

&lt;!-- Para scripts independentes (analytics, ads) --&gt;
&lt;script src="/js/analytics.js" async&gt;&lt;/script&gt;

&lt;!-- ES Modules já são adiados por padrão --&gt;
&lt;script type="module" src="/js/bootstrap.js"&gt;&lt;/script&gt;

Dica: prefira defer para scripts que dependem da ordem. Use async para scripts isolados.

3) Mantenha o “crítico” fora do caminho

&lt;!-- CSS crítico inline (até ~20–30KB) --&gt;
&lt;style&gt;/* CSS crítico */&lt;/style&gt;

&lt;!-- JS não crítico apenas no final do body --&gt;
&lt;script defer src="/js/non-critical.js"&gt;&lt;/script&gt;

Evite qualquer JS no <head> que não seja imprescindível. Priorize renderização.

4) Preload seletivo e prioridade de recursos

&lt;!-- Pré-carregar apenas pontos de entrada pequenos --&gt;
&lt;link rel="modulepreload" href="/js/bootstrap.js"&gt;

&lt;!-- Imagem hero com prioridade alta --&gt;
&lt;img src="/img/hero.webp" fetchpriority="high" width="1600" height="900" alt="Hero"&gt;

Evite pré-carregar bundles enormes. Pré-carregue o mínimo para iniciar a interação.

5) Carregamento condicional sob demanda

&lt;script type="module"&gt;
// Carregar apenas se o componente existir
if (document.querySelector('[data-slider]')) {
  import('/modules/slider.js');
}
if (IntersectionObserver in window) {
  const el = document.querySelector('[data-mapa]');
  if (el) import('/modules/mapa.js');
}
&lt;/script&gt;

Importe módulos quando realmente necessários. Reduza JS inicial e tempo de bloqueio.

6) Terceiros sem bloquear a renderização

&lt;!-- Estruture de forma não bloqueante --&gt;
&lt;script&gt;
let armed = false;
const load3p = () =&gt; {
  if (armed) return; armed = true;
  const s = document.createElement('script');
  s.src = 'https://example-cdn.com/tracker.js';
  s.async = true; document.head.append(s);
};
addEventListener('click', load3p, { once:true, passive:true });
addEventListener('scroll', load3p, { once:true, passive:true });
&lt;/script&gt;

Dispare terceiros após interação/consentimento. Menos bloqueio, menos CPU em first load.

7) Divida e adie: menos JS no início

// vite/webpack — exemplo de divisão
export default {
  build: {
    rollupOptions: {
      output: { manualChunks: { vendor: ['react','react-dom'] } }
    }
  }
}
  • Separar vendor ajuda no cache. Mantém a página inicial leve.
  • Remova JS morto (tree-shaking). Evite polyfills desnecessários.

8) Diagnóstico: encontre bloqueios reais

  • DevTools → Coverage: veja JS/CSS não usados.
  • Performance: verifique Long Tasks e Blocking Time.
  • Lighthouse: auditoria “Eliminate render-blocking resources”.

9) WordPress: corte bloqueios sem quebrar

&lt;?php
// 9.1 Forçar scripts no rodapé (quando seguro)
add_action('wp_enqueue_scripts', function(){
  global $wp_scripts;
  foreach ($wp_scripts-&gt;queue as $handle) {
    $wp_scripts-&gt;add_data($handle, 'group', 1); // 1 = footer
  }
}, 100);

// 9.2 Adicionar defer a scripts do tema
add_filter('script_loader_tag', function($tag, $handle){
  $allow = ['app-js','maps','slider'];
  if (in_array($handle, $allow)) {
    $tag = str_replace('&lt;script ', '&lt;script defer ', $tag);
  }
  return $tag;
}, 10, 2);

// 9.3 Desregistrar assets de plugins onde não são usados
add_action('wp_enqueue_scripts', function () {
  if (!is_page('contato')) {
    wp_dequeue_style('contact-form-7');
    wp_dequeue_script('contact-form-7');
  }
}, 100);

Teste em staging. Evite defer em scripts que manipulam document.write ou ordem estrita.

10) Padrões progressivos e APIs do navegador

&lt;script&gt;
// Execução ociosa para tarefas não críticas
requestIdleCallback?.(() =&gt; import('/modules/analytics-lite.js'));

// Dividir inicialização longa
const boot = async () =&gt; {
  const [{default: initUI}, {default: initEvents}] = await Promise.all([
    import('/modules/ui.js'),
    import('/modules/events.js')
  ]);
  initUI(); initEvents();
};
window.addEventListener('DOMContentLoaded', boot);
&lt;/script&gt;

Use ociosidade e paralelismo. Evite pausas grandes no main thread.

11) CDN, HTTP/2/3 e compressão

  • Ative HTTP/2/3 e Brotli na borda. Scripts via defer chegam rápido e não bloqueiam.
  • Use cache de longa duração para bundles estáveis.

12) Checklist rápido

  • Retire JS do <head> ou adicione defer/async.
  • Inline do CSS crítico. Restante assíncrono.
  • Imports condicionais para componentes raros.
  • Terceiros apenas após interação/consentimento.
  • Divida bundles. Remova código morto.
  • Audite Coverage/Long Tasks. Ajuste regressões.
  • CDN + HTTP/3 + Brotli. Cache forte.

Perguntas Frequentes (FAQ)

defer e async funcionam juntos?

Não. Use um ou outro. defer preserva ordem e executa após o HTML. async executa assim que carrega. Mover todos os scripts para o rodapé resolve?

Ajuda, mas não sozinho. Combine com defer, divisão e carregamento condicional. ES Modules eliminam bloqueio?

Sim, módulos são defer por padrão. Ainda assim, divida entradas e carregue sob demanda. Posso “deferizar” scripts de terceiros?

Em muitos casos, sim, com async e atraso por interação. Cuidado com bibliotecas que dependem de ordem. Inline de JS crítico vale a pena?

Apenas para pequenos trechos. Inlining grande aumenta HTML e piora cache. Minificar resolve bloqueio?

Minificação reduz bytes. O bloqueio vem do momento de execução. Use defer/async e divisão. Como medir ganho real?

Compare FCP, LCP e Total Blocking Time no Lighthouse e WebPageTest. Valide em rede 4G. Em WordPress, quais cortes dão mais resultado?

Desativar assets globais de plugins, mover scripts ao rodapé, e carregar componentes apenas nas páginas de uso. É seguro atrasar o pixel?

Sim, se o funil não exigir pageview imediato. Alternativa: usar uma versão leve e completar após interação. HTTP/3 substitui todas as otimizações?

Não. HTTP/3 reduz latência, mas scripts mal posicionados continuam bloqueando.

Tags

scripts bloqueantes, defer, async, es modules, performance web, renderização, lighthouse, long tasks, carregamento condicional, terceiros, wordpress, cache, http/3, brotli, otimização de site

“É necessário construir frases curtas. Toda otimização dividirá em, no mínimo, duas frases.”

O QUE NOSSOS CLIENTES ESTÃO DIZENDO?

Velocidade e Confiabilidade, para o seu Site Decolar!

Fale conosco

Negócio Digital Color White