Melhor compressor JavaScript [fechado]

171

Qual é o melhor compressor JavaScript disponível? Estou procurando uma ferramenta que:

  • é fácil de usar
  • tem uma alta taxa de compressão
  • Produza resultados finais confiáveis ​​(não estraga o código)
Ron Harlev
fonte
14
Alguém conhece a situação em 2011?
Dan
4
Estamos em 2012 e acho que o UglifyJS e o Closure são os vencedores, eu uso o UglifyJS e geralmente é melhor do que tudo.
Mkistinen
Uso o htmlcompressor.com/compressor.html no meu aplicativo de várias páginas do jQuery Mobile. Ele pega um arquivo HTML com tags <script> e compacta o HTML, JavaScript e CSS. Funciona como um encanto.
Anders
É 2017 - O que há de mais recente agora?
Abhinav Singi
É 2020. Com uma configuração "segura" padrão, o UglifyJS vence marginalmente porque é mais "seguro". Para usos avançados de energia, o Closure Compiler entrega a bunda do UglifyJS a si próprio. O Closure Compiler com ADVANCDED_OPTIMIZATIONS pode fazer todos os tipos de truques que ajudam a otimizar seu fluxo de trabalho e seu código ao mesmo tempo. Veja stackoverflow.com/a/50355530/5601591 para obter exemplos de grandiosidade do Closure Compiler (AVISO LEGAL: Não consegui encontrar uma postagem de blog adequada em outro lugar, por isso tive que encaminhá-lo para uma postagem que escrevi).
Jack Giffin

Respostas:

149

Lancei recentemente o UglifyJS , um compressor JavaScript escrito em JavaScript (executado na plataforma NodeJS Node.js , mas pode ser facilmente modificado para ser executado em qualquer mecanismo JavaScript, pois não precisa de Node.jscomponentes internos). É muito mais rápido que o YUI Compressor e o Google Closure , compacta melhor que o YUI em todos os scripts em que o testei e é mais seguro que o Closure (sabe lidar com "eval" ou "with").

Além da remoção de espaço em branco, o UglifyJS também faz o seguinte:

  • altera nomes de variáveis ​​locais (geralmente para caracteres únicos)
  • junta declarações var consecutivas
  • evita a inserção de colchetes, parênteses e ponto e vírgula desnecessários
  • otimiza IFs (remove "else" quando detecta que não é necessário, transforma IFs nos operadores &&, || ou? /: quando possível, etc.).
  • transforma foo["bar"]- foo.barse sempre que possível
  • remove aspas das chaves em literais de objeto, sempre que possível
  • resolve expressões simples quando isso leva a um código menor (1 + 3 * 4 ==> 13)

PS: Ah, também pode "embelezar". ;-)

mishoo
fonte
17
Usamos o uglify em um aplicativo de classe corporativa. Está fazendo um bom trabalho.
gyorgyabraham
Você poderia comparar com jsmin no nó?
Gringo Suave
recentemente enfear queda de chamadas de API
Gadelkareem
@mishoo Ei, eu amo o seu Uglify JS2. Minha rede não está funcionando bem atualmente ... Gostaria de usá-la no Windows. Alguma solução? : o)
Hydroper
@mishoo eu mostro ligação git, mas não começa a idéia como usá-lo
Sachin Sarola
124

Revisitando esta questão alguns anos depois, o UglifyJS , parece ser a melhor opção a partir de agora.

Conforme indicado abaixo, ele é executado na plataforma NodeJS, mas pode ser facilmente modificado para ser executado em qualquer mecanismo JavaScript.

--- Antiga resposta abaixo ---

O Google lançou o Closure Compiler, que parece estar gerando os menores arquivos até aqui e aqui

Antes disso, as várias opções eram as seguintes

Basicamente, o Packer faz um trabalho melhor na compactação inicial, mas se você deseja compactar os arquivos antes de enviá-los pelo fio (o que você deve fazer), o YUI Compressor obtém o menor tamanho final.

Os testes foram feitos no código jQuery btw.

  • Biblioteca jQuery original 62.885 bytes, 19.758 bytes após o gzip
  • jQuery compactado com JSMin 36.391 bytes, 11.541 bytes após o gzip
  • jQuery compactado com o Packer 21.557 bytes, 11.119 bytes após o gzip
  • jQuery compactado com o compressor YUI 31.822 bytes, 10.818 bytes após o gzip

@ daniel james menciona no comentário compressorrater que mostra o Packer liderando o gráfico na melhor compactação, então acho que sim

Pat
fonte
O Packer tem uma opção para 'codificar a base62' - e para o jQuery ele compacta menor que o yui após o gzip. Isso ocorre porque o jquery usa 'eval' e 'with', o que impede compressores 'seguros' de fazer determinadas compressões, mas o empacotador os ignora. Não é seguro em geral, mas o jQuery é testado para o Packer.
Daniel James
Além disso, tente compressorrater.thruhere.net se você não acredita em mim.
Daniel James
9
Não se esqueça da desvantagem do empacotador - o tempo de descompressão.
Nosredna
1
cuidado, google fechamento às vezes pode ser o pior compressor (saída ainda maior do original) - converte caracteres não-ascii em cordas para \uxxxxliterais por padrão .. usar por exemplo --charset UTF-8(se você tem certeza que você deixe o know navegador sobre isso de alguma forma)
mykhal
A saída ClosureCompiler não funciona para mim. jscompress.com funciona
codenamezero
43

O Compressor YUI é o caminho a percorrer. Tem uma ótima taxa de compactação, é bem testado e está em uso entre muitos sites importantes e, bem, pessoalmente recomendado por mim.

Usei-o para os meus projetos sem um único erro de JavaScript ou soluço. E tem boa documentação.

Eu nunca usei seus recursos de compactação CSS, mas eles existem também. A compactação CSS também funciona.

Nota: Embora o / packer / de Dean Edwards atinja uma taxa de compactação melhor que o YUI Compressor, encontrei alguns erros de JavaScript ao usá-lo.

Kamens
fonte
5
O Packer parece bom em termos de tamanho do arquivo, mas acontece que o tempo descompactado normalmente supera o ganho de tempo com a transferência de um arquivo menor pelos tubos. A maioria dos benchmarks reais do navegador que eu vi têm mais lentidão do que os arquivos não compactados não processados ​​servidos com gzip em termos de tempo de execução no navegador.
Coronel Sponsz
Aqui está uma referência: ericmmartin.com/comparison-of-javascript-compression-methods
Coronel Sponsz
Aqui está uma versão online do compressor no caso de você não quer lidar com a obtenção de java em execução: refresh-sf.com/yui
Bryan Legend
Os scripts compactados usando o empacotador não precisam ser descompactados, a menos que você marque a opção de codificação Base62 (o que você não deveria estar fazendo, pois é o gzip de um leigo - tenho certeza que a maioria dos servidores modernos suporta o gzip). Não faz sentido compactar um arquivo codificado em base62, pois não há redundância para explorar. A versão mais recente do empacotador (a versão final) não apresenta bugs, não possui uma sobrecarga de descompactação (contanto que você não codifique a base62) e ainda consegue a maior compactação. Agora também há uma versão em linha de comando do empacotador. Basta instalá-lo usando npm da seguinte forma: npm install packer. (= D
Aadit M Shah
8

Eu uso o ShrinkSafe no projeto Dojo - é excepcional porque ele realmente usa um interpretador JavaScript ( Rhino ) para lidar com a localização de símbolos no código e com a compreensão de seu escopo etc., o que ajuda a garantir que o código funcione quando for lançado. outra extremidade, ao contrário de muitas ferramentas de compactação que usam regex para fazer o mesmo (o que não é tão confiável).

Na verdade, eu tenho uma tarefa MSBuild em um Projeto de Implantação da Web na minha solução atual do Visual Studio que executa um script que, por sua vez, executa todos os arquivos JS da solução através do ShrinkSafe antes da implantação e funciona muito bem.

EDIT: By the way, "melhor" é aberto a debate, uma vez que os critérios para a "melhor" irá variar dependendo das necessidades do projeto. Pessoalmente, acho que o ShrinkSafe é um bom equilíbrio; para algumas pessoas que pensam o menor tamanho == melhor, será insuficiente.

EDIT: Vale a pena notar que o compressor YUI também usa Rhino.

Jason Bunting
fonte
5

Experimente o JSMin , obtenha C #, Java, C e outras portas e também esteja prontamente disponível.

chakrit
fonte
A porta C # foi movida / removida?
Greg B
4

Se você usa o Packer, basta ir até a opção 'encolher variáveis' e pressionar o código resultante. A opção base62 é apenas para se o seu servidor não puder enviar arquivos compactados em gzip. O empacotador com 'shrink vars' alcança melhor compactação da YUI, mas pode apresentar erros se você pular um ponto e vírgula em algum lugar.

base62 é basicamente o gzip de um homem pobre, e é por isso que gzipping o código base62-ed fornece arquivos maiores que o gzipping o código shrink-var-ed.

jcoglan
fonte
1

Aqui está um script de compressor YUI ( Byuic ) que localiza todos os js e css em um caminho e os compacta / (opcionalmente) ofusca-os. É bom integrar em um processo de compilação.

jimg
fonte
1

KJScompress

http://opensource.seznam.cz/KJScompress/index.html

Kjscompress / csskompress é um conjunto de dois aplicativos (kjscompress a csscompress) para remover espaços em branco e comentários não significativos dos arquivos que contêm JavaScript e CSS. Ambos são aplicativos de linha de comando para o sistema operacional GNU / Linux.

MicTech
fonte
1

O Js Crush é um bom compressor para uso após a minificação.

Alex
fonte