Miglior compressore JavaScript [chiuso]


171

Qual è il miglior compressore JavaScript disponibile? Sto cercando uno strumento che:

  • è facile da usare
  • ha un alto tasso di compressione
  • Produrre risultati finali affidabili (non confondere il codice)

14
Qualcuno conosce la situazione nel 2011?
Dan

4
Ora è il 2012 e penso che UglifyJS e Closure siano i vincitori, uso UglifyJS e di solito batte i pantaloni di tutto il resto.
mkoistinen,

Uso htmlcompressor.com/compressor.html per la mia app multipagina jQuery Mobile. Prende un file HTML con tag <script> e comprime HTML, JavaScript e CSS. Funziona come un fascino.
Anders,

È il 2017 - Quali sono le ultime novità adesso?
Abhinav Singi,

È il 2020. Con una configurazione "sicura" predefinita, UglifyJS vince marginalmente perché è più "sicura". Per usi energetici avanzati, Closure Compiler consegna il culo di UglifyJS a se stesso. Il compilatore di chiusura con ADVANCDED_OPTIMIZATIONS può eseguire tutti i tipi di trucchi che ti aiutano a ottimizzare il flusso di lavoro e il codice contemporaneamente. Vedi stackoverflow.com/a/50355530/5601591 per esempi della bellezza del compilatore di chiusura (NOTA BENE: non sono riuscito a trovare un post sul blog adatto altrove, quindi ho dovuto rimandarti a un post che ho scritto).
Jack Giffin il

Risposte:


149

Di recente ho rilasciato UglifyJS , un compressore JavaScript scritto in JavaScript (funziona sulla piattaforma NodeJS Node.js , ma può essere facilmente modificato per funzionare su qualsiasi motore JavaScript, dal momento che non ha bisogno di alcun Node.jsinterno). È molto più veloce sia di YUI Compressor che di Google Closure , comprime meglio di YUI su tutti gli script su cui l'ho testato ed è più sicuro di Closure (sa gestire "eval" o "with").

Oltre alla rimozione degli spazi bianchi, UglifyJS esegue anche le seguenti operazioni:

  • cambia i nomi delle variabili locali (di solito in singoli caratteri)
  • unisce dichiarazioni var consecutive
  • evita di inserire parentesi, parentesi e punti e virgola non necessari
  • ottimizza gli IF (rimuove "altro" quando rileva che non è necessario, trasforma gli IF in operatori &&, || o? /: quando possibile, ecc.).
  • si trasforma foo["bar"]in foo.bardove possibile
  • rimuove le virgolette dalle chiavi nei letterali degli oggetti, ove possibile
  • risolve espressioni semplici quando questo porta a un codice più piccolo (1 + 3 * 4 ==> 13)

PS: Oh, può anche "abbellire". ;-)


17
Usiamo uglify in un'applicazione di classe enterprise. Sta facendo un buon lavoro.
Gyorgyabraham,

Potresti confrontare a jsmin sul nodo?
Gringo Suave,

recentemente Uglify ha lasciato cadere le chiamate API
Gadelkareem il

@mishoo Ehi, adoro il tuo Uglify JS2. La mia rete non funziona bene in questi giorni ... Mi piacerebbe usarlo su Windows. Qualche soluzione? : o)
Idroper

@mishoo Mostro git link ma non ho idea di come usarlo
Sachin Sarola

124

Rivedere questa domanda qualche anno dopo, UglifyJS , sembra essere la migliore opzione al momento.

Come indicato di seguito, funziona sulla piattaforma NodeJS, ma può essere facilmente modificato per essere eseguito su qualsiasi motore JavaScript.

--- Vecchia risposta di seguito ---

Google ha rilasciato Closure Compiler che sembra generare i file più piccoli finora visti qui e qui

Precedentemente le varie opzioni erano le seguenti

Fondamentalmente Packer fa un lavoro migliore alla compressione iniziale, ma se hai intenzione di decomprimere i file prima di inviarli sul filo (cosa che dovresti fare) YUI Compressor ottiene la dimensione finale più piccola.

I test sono stati eseguiti sul codice jQuery a proposito.

  • Libreria jQuery originale 62.885 byte, 19.758 byte dopo gzip
  • jQuery minimizzato con JSMin 36.391 byte, 11.541 byte dopo gzip
  • jQuery minimizzato con Packer 21.557 byte, 11.119 byte dopo gzip
  • jQuery minimizzato con il compressore YUI 31.822 byte, 10.818 byte dopo gzip

@ daniel james menziona nel commento compressore che mostra Packer in testa alla classifica nella migliore compressione, quindi immagino ymmv


Packer ha un'opzione per 'base62 codificare' off - e per jQuery comprime più piccolo di yui dopo gzip. Questo perché jquery usa 'eval' e 'with' che impedisce ai compressori 'sicuri' di fare determinate compressioni, ma il packer le ignora. Non è sicuro in generale, ma jQuery è testato per Packer.
Daniel James,

Inoltre, prova compressorrater.thruhere.net se non mi credi.
Daniel James,

9
Non dimenticare il rovescio della medaglia dell'imballatore: il tempo di decompressione.
Nosredna,

1
attenzione, la chiusura di Google a volte può essere il peggior compressore (output anche più grande dell'originale) - \uxxxxper impostazione predefinita converte i caratteri non ascii nelle stringhe in valori letterali .. utilizzare ad es. --charset UTF-8(se si è sicuri di far sapere al browser in qualche modo)
mykhal,

L'output di ClosureCompiler non funziona per me. jscompress.com funziona
codenamezero

43

YUI Compressor è la strada da percorrere. Ha un ottimo tasso di compressione, è ben collaudato ed è in uso tra i migliori siti e, bene, personalmente consigliato da me.

L'ho usato per i miei progetti senza un singolo errore JavaScript o singhiozzo. E ha una bella documentazione.

Non ho mai usato le sue capacità di compressione CSS, ma esistono anche. La compressione CSS funziona altrettanto bene.

Nota: sebbene Dean Edwards / packer / raggiunga un tasso di compressione migliore rispetto a YUI Compressor, ho riscontrato alcuni errori JavaScript durante l'utilizzo.


5
Packer ha un bell'aspetto in termini di dimensioni del file, ma risulta che il tempo impiegato per il disimballaggio supera normalmente il guadagno del trasferimento di un file più piccolo attraverso i tubi. La maggior parte degli attuali benchmark del browser che ho visto è più lenta dei file non compressi non elaborati forniti con gzip in termini di tempo per l'esecuzione nel browser.
Colonnello Sponsz,


Ecco una versione online del compressore nel caso in cui non desideri occuparti di far funzionare java: refresh-sf.com/yui
Bryan Legend

Gli script compressi utilizzando il packer non devono essere decompressi a meno che non si controlli l'opzione di codifica Base62 (cosa che non si dovrebbe fare poiché si tratta di gzip di un laico - Sono sicuro che la maggior parte dei server moderni supportano gzip). Non ha senso gzipare un file codificato in base62 poiché non c'è ridondanza da sfruttare. La versione più recente di packer (la versione finale) non introduce bug, non ha un overhead di decompressione (fintanto che non si codifica base62) e raggiunge comunque la massima compressione. Inoltre ora esiste una versione a riga di comando del packer. Basta installarlo utilizzando NPM come segue: npm install packer. (= D
Aadit M Shah,

8

Uso ShrinkSafe dal progetto Dojo - è eccezionale perché utilizza effettivamente un interprete JavaScript ( Rhino ) per gestire la ricerca di simboli nel codice e comprenderne l'ambito, ecc. Che aiuta a garantire che il codice funzionerà quando esce dall'altra parte, al contrario di molti strumenti di compressione che usano regex per fare lo stesso (che non è così affidabile).

In realtà ho un'attività MSBuild in un progetto di distribuzione Web nella mia attuale soluzione di Visual Studio che esegue uno script che a sua volta esegue tutti i file JS della soluzione tramite ShrinkSafe prima della distribuzione e funziona abbastanza bene.

EDIT: A proposito, "best" è aperto al dibattito, poiché i criteri per "best" varieranno a seconda delle esigenze del progetto. Personalmente, penso che ShrinkSafe sia un buon equilibrio; per alcune persone che ritengono la dimensione più piccola == migliore, sarà insufficiente.

EDIT: Vale la pena notare che anche il compressore YUI utilizza Rhino.


5

Prova JSMin , hai C #, Java, C e altre porte e anche prontamente disponibili.


La porta C # è stata spostata / rimossa?
Greg B

4

Se usi Packer, vai oltre l'opzione "riduci variabili" e decomprimi il codice risultante. L'opzione base62 è valida solo se il tuo server non è in grado di inviare file compressi con gzip. Il packer con "shrink vars" consente una migliore compressione della YUI, ma può introdurre bug se hai saltato un punto e virgola da qualche parte.

base62 è fondamentalmente un gzip di un uomo povero, motivo per cui il codice gzip di base62 ed ti dà file più grandi del codice gzip di restringimento.





1

Ecco uno script del compressore YUI ( Byuic ) che trova tutti i js e i CSS lungo un percorso e li comprime / (opzionalmente) li offusca. Bello da integrare in un processo di compilazione.



1

KJScompress

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

Kjscompress / csskompress è un insieme di due applicazioni (kjscompress a csscompress) per rimuovere spazi bianchi e commenti non significativi dai file contenenti JavaScript e CSS. Entrambe sono applicazioni da riga di comando per il sistema operativo GNU / Linux.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.