Site cheio de plugins jQuery: inventário, substitutos nativos e o que cortar primeiro
Faça o inventário dos plugins do site, ligue cada um a uma tarefa da pessoa, troque os que o navegador já resolve por HTML e CSS e meça o antes e o depois.
O site de uma clínica veterinária carrega 14 plugins jQuery na página inicial: carrossel, parallax, contador animado, lightbox, acordeão, rolagem suave, cabeçalho fixo, tooltip, carregamento preguiçoso de imagem, modal, máscara, validação, contagem regressiva e um efeito de digitação no título. No celular, o botão "Agendar consulta" demora a responder ao toque. Cada plugin veio de uma lista de "plugins que todo site deve ter". A resposta curta: faça um inventário, escreva a tarefa da pessoa que cada plugin atende, remova o que não atende tarefa nenhuma e troque pelo recurso nativo o que o navegador já faz. Meça antes e depois.
Uma lista de plugins responde "o que dá para fazer". A arquitetura da página responde "o que a pessoa veio fazer aqui". Na clínica, as tarefas são três: achar o telefone, ver os serviços e agendar.
Por que a lista de plugins pesa mais do que parece
Cada plugin traz o seu JavaScript e, muitas vezes, o seu CSS. O navegador baixa, analisa e executa tudo antes de a página ficar responsiva, e o celular intermediário faz isso bem mais devagar que o notebook do desenvolvedor. Plugins que reagem à rolagem, como parallax e cabeçalho fixo feito em script, rodam código a cada movimento do dedo.
O custo não é só de desempenho. Cada plugin é uma dependência para atualizar, uma chance de conflito com outro (o assunto do guia sobre plugins jQuery brigando no mesmo campo) e um comportamento que precisa funcionar no teclado e no leitor de tela. Efeito que não serve a nenhuma tarefa é custo sem retorno.
Como fazer o inventário
- Liste todos os scripts e folhas de estilo de terceiros da página, com tamanho.
- Para cada um, escreva em uma frase a tarefa da pessoa que ele ajuda a cumprir.
- Marque se existe substituto nativo em HTML ou CSS.
- Decida: remover, substituir ou manter.
- Meça a página antes de mexer e depois de cada lote de mudanças.
Para a lista, abra a aba Network do DevTools, marque a opção de desativar cache, filtre por JS e recarregue. Anote nome e tamanho transferido. Depois rode o Lighthouse na mesma aba, em modo móvel, e guarde o relatório como linha de base.
Na clínica, o inventário ficou assim:
plugin tarefa da pessoa substituto nativo decisão
carrossel ver serviços scroll-snap ou lista substituir
parallax nenhuma - remover
contador animado nenhuma número estático remover
efeito digitação nenhuma título estático remover
contagem regressiva nenhuma (campanha acabou) - remover
acordeão ler perguntas frequentes details/summary substituir
modal agendar consulta dialog substituir
rolagem suave ir para a seção scroll-behavior substituir
cabeçalho fixo achar o telefone position: sticky substituir
lazy load página carregar rápido loading="lazy" substituir
lightbox ver foto maior link para a imagem substituir
tooltip entender ícone texto visível substituir
máscara digitar telefone input type="tel" manter (uma)
validação enviar sem erro atributos HTML + servidor substituir
Cinco plugins não tinham tarefa nenhuma. Oito tinham substituto nativo. Sobrou um.
Os substitutos nativos que já funcionam nos navegadores atuais
Acordeão e modal sem biblioteca
O elemento details abre e fecha com clique e teclado, sem JavaScript. O dialog, aberto com showModal(), prende o foco dentro dele e fecha com a tecla Esc. O guia sobre peça de interface que o CSS já faz mostra mais casos.
<details>
<summary>Vocês atendem animais silvestres?</summary>
<p>Atendemos aves e pequenos mamíferos com agendamento prévio.</p>
</details>
<button type="button" id="abrir-agenda">Agendar consulta</button>
<dialog id="agenda" aria-labelledby="titulo-agenda">
<h2 id="titulo-agenda">Agendar consulta</h2>
<p>Ligue para (11) 4000-0000 ou use o formulário abaixo.</p>
<form method="dialog"><button>Fechar</button></form>
</dialog>
<script>
const agenda = document.getElementById('agenda');
document.getElementById('abrir-agenda').addEventListener('click', () => agenda.showModal());
</script>
O formulário com method="dialog" fecha o diálogo sem enviar nada. Dentro do dialog real da clínica entra o formulário de agendamento, que envia normalmente para o servidor.
Rolagem, cabeçalho, imagens e carrossel em CSS
html { scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
html { scroll-behavior: auto; }
}
.cabecalho { position: sticky; top: 0; z-index: 10; }
.servicos {
display: flex;
gap: 1rem;
overflow-x: auto;
scroll-snap-type: x mandatory;
}
.servicos > article {
flex: 0 0 80%;
scroll-snap-align: start;
}
A rolagem suave respeita quem pediu menos movimento no sistema. O cabeçalho fixo não roda código na rolagem. O carrossel com scroll-snap funciona com o dedo, com a roda do mouse e com o teclado quando o contêiner recebe foco. Antes de manter qualquer carrossel, pergunte se uma lista simples dos seis serviços não resolve melhor: ninguém precisa arrastar para ver o que cabe numa tela.
Para imagens, <img src="consultorio.jpg" alt="Sala de atendimento" width="800" height="533" loading="lazy"> substitui o plugin. A largura e a altura reservam o espaço e evitam que o conteúdo pule quando a imagem chega. Não use loading="lazy" na imagem principal do topo, que precisa chegar primeiro.
Medir o antes e o depois
Depois de cada lote de mudanças, repita a medição com as mesmas condições. Compare o total de JavaScript transferido e as métricas do Lighthouse. Para referência, o Google considera boa uma página cujo maior elemento visível aparece em até 2,5 segundos (LCP) e que responde à interação em até 200 milissegundos (INP). Os números do laboratório não substituem os de usuários reais, mas mostram a direção.
Quando sobrar pouco código usando o jQuery, procure as chamadas restantes com grep -rnF '$(' js/. Se for uma máscara e um envio de formulário, reescrever em JavaScript puro remove a última dependência grande. O guia sobre site mais rápido: por onde começar ajuda a priorizar o que vem depois.
Erros comuns
- Adotar a lista inteira de um artigo: a página ganha efeitos que nenhuma tarefa pede e fica lenta justamente no celular de quem quer agendar.
- Remover tudo de uma vez sem medir: você não sabe qual mudança ajudou e não percebe se algo deixou de funcionar.
- Trocar um plugin por outro "mais leve" com a mesma função inútil: o peso cai, mas o efeito continua sem tarefa.
- Tooltip como única explicação de ícone: no toque não existe passar o mouse, e a pessoa fica sem a informação.
- Animação sem respeitar
prefers-reduced-motion: parallax e rolagem forçada causam desconforto real em algumas pessoas. - Esquecer a campanha encerrada: contagem regressiva parada em zero continua baixando código toda visita.
Checklist
- Existe um inventário com cada plugin, a tarefa que ele atende e a decisão tomada.
- Nenhum plugin sem tarefa continua carregado.
- Acordeão, modal, rolagem suave, cabeçalho fixo e lazy load usam recursos nativos.
- Animações respeitam
prefers-reduced-motion. - Há uma medição de linha de base e outra depois das mudanças, nas mesmas condições.
- Tudo que sobrou funciona com teclado.
- Você sabe se o jQuery ainda é necessário e por quê.
Escolha o plugin mais pesado da sua página inicial: qual tarefa da pessoa ficaria sem solução se ele sumisse amanhã?
Referência: http://www.siteparaempresas.com.br/blog/?p=3865