🎉 USE O CUPOM DESCONTO.FULL | 20% OFF acima de R$ 50,00

Como corrigir o conflito de otimização de JavaScript entre WP Rocket e Perfmatters

Time Full Services Time Full Services
Tipo Performance & Velocidade
Nome do erro Conflito de otimização de JavaScript entre WP Rocket e Perfmatters EN: WP Rocket and Perfmatters JavaScript optimization conflict
Severidade Grave
Descrição O conflito acontece quando WP Rocket e Perfmatters aplicam a mesma otimização de JavaScript (adiar, atrasar ou minificar) sobre os mesmos arquivos. O script recebe a otimização em dobro, perde a ordem de carregamento e funções como menu, slider e formulário param de responder no frontend.

O que é o conflito de JS entre WP Rocket e Perfmatters?

O conflito de JS entre WP Rocket e Perfmatters ocorre porque os dois plugins oferecem as mesmas otimizacoes de JavaScript: adiar o carregamento (defer), atrasar a execução até a interacao do usuário (delay) e minificar. Quando a mesma opção fica ligada nos dois ao mesmo tempo, o mesmo arquivo de script e processado duas vezes. A documentação oficial do WP Rocket avisa que aplicar a mesma otimização em dois plugins ao mesmo tempo pode causar conflitos, e que a combinacao de JavaScript de outros plugins precisa ser desativada ao usar o Delay JavaScript execution, senao podem aparecer problemas de exibicao.

Como identificar

  • Funções em JavaScript param de responder depois de ligar a otimização nos dois plugins: menu hamburguer não abre, slider não gira, formulário não envia
  • Erro no console do navegador do tipo ‘Uncaught ReferenceError: jQuery is not defined’ ou ‘is not a function’, porque o script foi adiado fora de ordem
  • A página carrega sem interatividade até o primeiro clique ou scroll, sinal de que o mesmo script foi atrasado (delay) pelos dois plugins
  • Layout ou elementos que dependem de JavaScript (abas, accordions, contadores) aparecem quebrados so no frontend, com o admin funcionando normal
  • A nota de JavaScript do PageSpeed Insights não melhora ou até cai, mesmo com defer e delay ligados nos dois plugins de otimização

Como prevenir

  • Mantenha cada otimização de JavaScript (defer, delay, minificar) ligada em apenas um plugin: ou WP Rocket, ou Perfmatters, nunca nos dois ao mesmo tempo
  • Antes de ligar uma opção de JavaScript no Perfmatters, confirme que a mesma opção esta desligada no WP Rocket, e o contrario
  • Sempre que mexer em defer ou delay, teste o frontend em janela anonima com o console do navegador aberto, procurando por ReferenceError antes de considerar resolvido
  • Documente para a equipe qual plugin cuida de cada otimização de JavaScript, para ninguem reativar a opção duplicada por engano

Causa

  • Defer JavaScript do WP Rocket (aba Otimizar arquivos -> Carregar JavaScript adiado) ligado ao mesmo tempo que o Defer JavaScript do Perfmatters (Assets -> JavaScript -> Defer JavaScript): o atributo defer e aplicado em dobro no mesmo arquivo.
  • Delay JavaScript Execution ligado nos dois plugins ao mesmo tempo (WP Rocket: Otimizar arquivos -> Atrasar a execução de JavaScript; Perfmatters: Assets -> JavaScript -> Delay JavaScript): o script fica preso esperando a interacao do usuário duas vezes e nunca executa na ordem certa.
  • Minificacao de JavaScript ativada nos dois ao mesmo tempo: um plugin minifica um arquivo que o outro já minificou, gerando código invalido que para a execução.
  • Scripts que dependem de ordem (jQuery e plugins que dependem do jQuery) sendo adiados sem exclusão: a biblioteca carrega depois do script que precisa dela e dispara ReferenceError.
  • Falta de exclusão do mesmo script nos dois plugins: ao excluir um arquivo do delay so no WP Rocket e deixar ligado no Perfmatters (ou vice-versa), o script continua atrasado por um dos lados.

Como resolver

  1. Escolha um único plugin para adiar e atrasar o JavaScript: Cada otimização de JavaScript tem de viver em um plugin so. Decida se quem vai cuidar de defer e delay e o WP Rocket ou o Perfmatters. A recomendacao prática e centralizar no WP Rocket, que tem exclusoes em um clique para plugins e temas comuns.
    Painel: WP Rocket -> Otimizar arquivos -> Carregar JavaScript adiado = ligado
    Painel: WP Rocket -> Otimizar arquivos -> Atrasar a execução de JavaScript = ligado
  2. Desligue as mesmas opções de JavaScript no Perfmatters: Com o WP Rocket cuidando do JavaScript, desative Defer JavaScript, Delay JavaScript e a minificacao de JavaScript no Perfmatters para o mesmo arquivo não ser processado duas vezes.
    Painel: Perfmatters -> Assets -> JavaScript -> Defer JavaScript = Off
    Painel: Perfmatters -> Assets -> JavaScript -> Delay JavaScript = Off
    Painel: Perfmatters -> Assets -> JavaScript -> Minify JavaScript = Off
  3. Exclua do delay os scripts que quebraram: Se um recurso (menu, slider, formulário) parou ao ligar o Atrasar execução, exclua o arquivo dele do delay no plugin que ficou responsável. No WP Rocket isso vai na caixa Arquivos JavaScript excluidos, uma palavra ou caminho por linha. Alternativa por código: adicionar o atributo nowprocket na tag do script.
    /wp-content/themes/seu-tema/assets/js/navigation.min.js
    /wp-includes/js/jquery/jquery.min.js
    data-nowprocket
  4. Ligue o Safe Mode do WP Rocket se o jQuery quebrar: Quando o erro for jQuery is not defined, ative o Safe Mode dentro de Atrasar a execução de JavaScript. Ele exclui automaticamente os scripts do core do WordPress e o jQuery do delay, devolvendo a ordem de carregamento.
    Painel: WP Rocket -> Otimizar arquivos -> Atrasar a execução de JavaScript -> Safe Mode for jQuery = ligado
  5. Limpe o cache e revalide no frontend e no PageSpeed: Depois de centralizar a otimização e ajustar as exclusoes, limpe o cache e teste em janela anonima. Confirme que menu, slider e formulário respondem, que o console não tem ReferenceError e rode o PageSpeed para medir o ganho real.
    Painel: WP Rocket -> Dashboard -> Limpar cache
    https://pagespeed.web.dev/
PHP
<?php
/**
 * Excluir scripts criticos do Delay JavaScript do WP Rocket via filtro.
 * Evita que jQuery e o JS do tema sejam atrasados e quebrem menu/slider/forms.
 * Coloque em um plugin de snippets ou no functions.php do tema filho.
 */
add_filter( 'rocket_delay_js_exclusions', function ( $excluded ) {
    $excluded[] = '/wp-includes/js/jquery/jquery.min.js';
    $excluded[] = '/wp-includes/js/jquery/jquery-migrate.min.js';
    $excluded[] = 'themes/seu-tema/assets/js/navigation';
    return $excluded;
} );

Perguntas frequentes

Posso usar WP Rocket e Perfmatters juntos?
Sim. Os dois convivem bem porque o Perfmatters não faz cache de página. O cuidado e não ligar a mesma otimização de JavaScript (defer, delay, minificar) nos dois ao mesmo tempo, senao o script e processado duas vezes e quebra.
Qual plugin deve cuidar do defer e do delay de JavaScript?
Tanto faz tecnicamente, desde que seja so um. Na prática vale centralizar no WP Rocket, que oferece exclusoes em um clique e o Safe Mode para jQuery. Escolha um e desligue as mesmas opções no outro plugin.
Por que meu menu e slider pararam depois de ligar o Atrasar execução de JavaScript?
Porque o script que controla esses elementos foi atrasado e não executou na ordem certa, ou foi atrasado pelos dois plugins ao mesmo tempo. Centralize a opção em um plugin so e exclua o arquivo desse recurso do delay.
O que significa o erro jQuery is not defined depois de adiar o JavaScript?
Significa que um script rodou antes do jQuery, que foi adiado para depois dele. Ligue o Safe Mode for jQuery no WP Rocket ou exclua o jQuery do delay, para a biblioteca voltar a carregar antes dos scripts que dependem dela.
Como excluo um script do delay de JavaScript no WP Rocket?
Va em Otimizar arquivos, abra Atrasar a execução de JavaScript e adicione o caminho ou um trecho do nome do arquivo na caixa de exclusão, um por linha. Também da para marcar o atributo nowprocket direto na tag do script.
Preciso desligar a minificacao de JavaScript em um dos plugins?
Sim. Minificar o mesmo arquivo duas vezes pode gerar código invalido. Deixe a minificacao de JavaScript ligada em apenas um dos dois plugins e desligada no outro.
Como sei qual script esta quebrando o site?
Abra o console do navegador (F12) no frontend e procure por ReferenceError ou is not a function. O nome do arquivo no erro indica qual script excluir do delay no plugin responsável pela otimização.

Seja PRO.

Tenha acesso a snippets de código premium — PHP, JavaScript, CSS e HTML prontos para usar em seus projetos.

Conhecer o plano Pro →

Uma nova era para o WordPress.

A FULL Services redefine o CMS com uma arquitetura modular que transforma o WordPress em um motor de crescimento digital. 

Painéis personalizados

Um novo nível de controle para o WordPress. Acompanhe métricas, automações e evolução do seu site em um único painel visual.

A força por trás de grandes marcas

Para agências, estúdios e profissionais independentes que desejam oferecer soluções de alto nível com sua própria marca.

Componentes

Hero Sections

30 componentes

Seções de CTA

14 componentes

Login

14 componentes

Blog

14 componentes

Cabeçalhos

24 componentes

Seções de FAQ

53 componentes

Cadastro

53 componentes

Blog individual

53 componentes

Rodapés

28 componentes

Seções de contato

27 componentes

Seções de preços

27 componentes

Faixas

27 componentes

Portfólio

16 componentes

Seções de equipe

12 componentes

Números

12 componentes

Logotipos

12 componentes