Minificar JavaScript

Remoção simples de comentários e espaços extras. Não substitui Terser/esbuild em builds reais.

{{ t("sizeBefore") }}: {{ minifyJs.beforeSize }}
{{ t("sizeAfter") }}: {{ minifyJs.afterSize }}
{{ t("sizeReduction") }}: {{ minifyJs.reduction }}

Descrição

JavaScript é, hoje, a linguagem mais distribuída do mundo — no sentido literal. Cada vez que um usuário abre uma página web, o browser baixa, parseia e executa arquivos .js que vieram de um servidor a centenas ou milhares de quilômetros de distância. A ironia histórica é que Brendan Eich criou o JavaScript em 10 dias para fazer pequenas animações e validações de formulário. Ninguém imaginava que, três décadas depois, arquivos de centenas de kilobytes seriam a norma, e que uma indústria inteira de ferramentas de build existiria para comprimi-los.

Minificação não é só remover espaços e comentários — embora seja um começo válido. As ferramentas mais avançadas como Terser e esbuild vão muito além: renomeiam variáveis locais de nomes descritivos como `usuarioLogado` para `a`, eliminam código morto (funções declaradas mas nunca chamadas), inline funções pequenas, e até substituem `true` por `!0` e `false` por `!1` porque esses literais têm menos caracteres. O resultado pode ser um arquivo 40% a 70% menor que o original — e isso antes mesmo de aplicar gzip ou brotli no servidor.

A ferramenta desta página implementa a minificação básica: remove comentários de linha e bloco, elimina espaços e tabs desnecessários e colapsa quebras de linha. É suficiente para entender o impacto da minificação, fazer testes rápidos e comparar tamanhos. Para builds de produção com renomeação de variáveis, tree shaking e code splitting, o caminho é usar Vite, webpack, Rollup ou esbuild integrados ao pipeline. Nenhuma ferramenta online substitui isso — e seria ingênuo tentar.

Detalhamento técnico

Por que o renomeio de variáveis reduz tanto o arquivo

  • O mangling (renomeio de variáveis) é a técnica mais poderosa da minificação avançada. Uma variável chamada `isUserAuthenticatedAndActive` tem 31 caracteres; renomeada para `a`, vira 1. Multiplicado por centenas de ocorrências, a economia é enorme.
  • Eliminação de código morto (dead code elimination): funções declaradas mas nunca referenciadas são simplesmente removidas. Terser analisa o grafo de chamadas e descarta tudo que nunca pode ser alcançado em tempo de execução.
  • Inlining de funções pequenas: se uma função tem apenas um `return` com uma expressão simples, o compilador pode substituir cada chamada pelo corpo da função, eliminando a overhead de uma chamada de função no bundle final.
  • Tree shaking é a versão em nível de módulo da eliminação de código morto. Quando você importa apenas `{ debounce }` de uma biblioteca, os bundlers modernos como Rollup e esbuild descartam todo o resto da biblioteca do bundle de saída.
  • Substituições literais: `true` vira `!0` (2 caracteres vs. 4), `false` vira `!1`, `undefined` vira `void 0`. São micro-otimizações, mas em um arquivo com milhares de ocorrências fazem diferença mensurável.

A evolução das ferramentas: de JSMin ao esbuild

  • JSMin (Douglas Crockford, 2003) foi o primeiro minificador amplamente usado. Fazia apenas remoção de comentários e whitespace — sem mangling, sem análise semântica. Era suficiente para a web de 2003.
  • Packer (Dean Edwards, 2004) foi um passo diferente: comprimia o JavaScript com Base62 e adicionava código de descompressão inline. Gerava arquivos menores, mas com overhead de CPU no parse. Ficou obsoleto com a melhora dos algoritmos de compressão HTTP.
  • YUI Compressor (Yahoo, 2008) introduziu análise semântica real com renomeio de variáveis locais. Foi o estado da arte por anos, mas era lento por ser baseado em Java.
  • UglifyJS (2010) trouxe velocidade e o ecossistema Node.js. Por anos foi o padrão de facto para minificação com mangling. Terser é um fork mantido do UglifyJS com suporte a ES2015+ e é ainda hoje a escolha padrão do webpack.
  • esbuild (Evan Wallace, 2020) reescreveu o problema em Go. É 10x a 100x mais rápido que as ferramentas anteriores porque processa arquivos em paralelo e evita a overhead da VM do Node.js. SWC (Rust) segue a mesma filosofia e é usado internamente pelo Next.js.

Guia da ferramenta

  • O que é JavaScript Linguagem de script usada no browser e no Node; código-fonte pode ter comentários e espaços para legibilidade.

  • O que o minificador faz Remove comentários e espaços supérfluos de forma conservadora.

  • Por que usar Teste rápido de redução de tamanho. Produção deve usar bundlers (Terser, esbuild, etc.) com tree-shaking e testes.

Exemplo de Código

O que este minificador básico faz (regex ilustrativo)
// Remoção de comentários de linha
const semComentariosLinha = codigo.replace(/\/\/.*$/gm, '');

// Remoção de comentários de bloco
const semComentariosBloco = semComentariosLinha.replace(/\/\*[\s\S]*?\*\//g, '');

// Colapso de whitespace
const minificado = semComentariosBloco
  .replace(/[ \t]+/g, ' ')
  .replace(/\n\s*\n/g, '\n')
  .trim();

// Resultado: arquivo menor, sem mangling de variáveis
// Para mangling real, use Terser ou esbuild
Minificação avançada com Terser (Node.js API)
import { minify } from 'terser';

const codigo = `
function calcularDesconto(valorOriginal, percentual) {
  const fator = percentual / 100;
  return valorOriginal * (1 - fator);
}
`;

const resultado = await minify(codigo, {
  compress: {
    dead_code: true,
    drop_console: true,
  },
  mangle: {
    toplevel: true, // renomeia variáveis de nível superior também
  },
  format: {
    comments: false,
  },
});

console.log(resultado.code);
// Saída aproximada: function n(n,c){return n*(1-c/100)}

Antes

function hello() {
  // comentário
  return 1;
}

Perguntas frequentes

Para que serve esta ferramenta?

Ela roda 100% no seu navegador: útil para validar, formatar ou converter dados no dia a dia de desenvolvimento.

Meus dados são enviados a algum servidor?

O processamento é feito localmente via JavaScript. Não armazenamos o conteúdo que você cola nas caixas de texto.

Posso usar em produção ou para dados reais?

Use por sua conta e risco. Para segredos (senhas, tokens), prefira ambientes controlados e políticas da sua empresa. E lembre sempre de revisar os conteúdos gerados. Nunca confie cegamente nas coisas que vê na internet.