50

Il compressore YUI era il miglior strumento di consenso per ridurre al minimo, ma Closure sembra che potrebbe essere migliore.Devo utilizzare il compressore YUI o il nuovo compilatore Google Closure per comprimere il mio JavaScript?

+7

+1 per avermi parlato di Google Closure, di cui non ho mai sentito parlare :) –

+2

Aggiungerò anche che c'è un packer poco conosciuto qui: http://dean.edwards.name/packer questo è per quanto ne so quello che dà i migliori risultati, ma è necessario aggiungere tutto il punto e virgola implicito, usare JSlint per quello –

+3

packer è caduto in disgrazia perché ha bisogno di decomprimere ad ogni corsa. – Nosredna

risposta

27

"Qualunque sia la soluzione migliore per te" penso che sia la risposta generale al momento - lo YUI è stato disponibile più a lungo, quindi indubbiamente sarà quello che attualmente ha il consenso come lo strumento migliore. Considerando che Closure è nuovo per noi, quindi non c'è la ricchezza di esperienza con Closure come lo è con YUI. Quindi non penso che tu possa trovare un convincente argomento del mondo reale sul perché utilizzare Closure basato sulle esperienze delle persone con esso semplicemente perché è nuovo.

Questo non vuol dire che non dovresti usare Closure .... solo il mio giro sul modo di dire, non credo che ci sia una risposta disponibile fino a quando un numero di persone ha usato il 2 e li ha confrontati.

Edit: Ci sono un paio di primi confronti, dicendo Chiusura dà un miglioramento: http://blog.feedly.com/2009/11/06/google-closure-vs-yui-min/
http://news.ycombinator.com/item?id=924426

Ulteriori Edit: vale la pena tenere d'occhio la lista problema per chiusura: http://code.google.com/p/closure-compiler/issues/list

10

La chiusura può essere utilizzata in modalità Semplice o Avanzata. La modalità semplice è abbastanza sicura per la maggior parte del codice JavaScript, poiché rinomina solo le variabili locali nelle funzioni per ottenere ulteriore compressione.

La modalità avanzata è molto più aggressiva. Rinominerà le chiavi nei letterali degli oggetti e le chiamate di funzioni in linea se può determinare che restituiscono valori semplici senza effetti collaterali.

Ad esempio:

function Foo() 
{ 
    return "hello"; 
} 

alert(Foo()); 

viene tradotto:

alert("hello"); 

E questo codice:

var o = {First: "Mike", Last: "Koss"}; 
alert(o); 

viene tradotto:

alert({a:"Mike",b:"Koss"}); 

è possibile impedire la modalità avanzata di cambiare i valori chiave in letterali oggetto citando i nomi come questo:

{'First': "Mike", 'Last': "Koss"} 

È possibile provare questi e altri esempi di Google di interattivo Closure Compiler site.

+0

Closure Compiler è anche in grado di estrapolare le funzioni in linea, aumentando drasticamente il codice. – Nosredna

+0

Il compilatore di chiusura eseguirà le funzioni inline in modalità semplice ma non attraverso la funzione globale. – John

5

Penso che dipenda dal codice. Se vuoi compilare il tuo codice, allora penso che valga la pena di correggere il codice in modo che funzioni con il compilatore di chiusura (alcune cose potrebbero sembrare un po 'scomode all'inizio). Credo che Closure Compiler presto sarà la scelta migliore per tali lavori e ti farà anche riordinare un po 'il tuo codice e mantenere uno stile coerente (ovviamente dipende dalle tue preferenze, potresti odiare alcune parti, io lo faccio: P).

Se dipende da altre librerie a mio parere si dovrebbe aspettare un po 'fino a che non rilasciano Chiusura del compilatore versioni compatibili. Non dovrebbe volerci molto tempo per la maggior parte delle librerie popolari là fuori.E forse puoi fornire delle correzioni per quelle librerie "non-attive" che usi tu stesso.

sto parlando avanzata Compilation modalità qui, la modalità semplice compilazione alcuni ha sottolineato è abbastanza sicuro da usare.

Ed ecco un parere diverso - Google Closure ? I'm Not Impressed. È forse un po 'troppo duro, ma bella lettura. Immagino che solo il tempo indicherà quale è migliore =)

+0

Perché non ti lascia andare con 'eval()'? – rxgx

14

Dai confronti che ho visto, Closure sembra essere il chiaro vincitore in termini di riduzione delle dimensioni del file. Questo articolo utilizza tre popolari librerie JS (jQuery, Prototype, MooTools) per confrontare compressione tra YUI Compressor e Closure Compiler: http://www.bloggingdeveloper.com/post/Closure-Compiler-vs-YUI-Compressor-Comparing-the-Javascript-Compression-Tools.aspx

Chiusura esce di fronte in ciascuna prova, in particolare nella sua modalità avanzata, dove si "riduce al minimo il codice dimensioni circa del 20-25% in più rispetto al compressore YUI fornendo una compressione di quasi il 60%. "

+0

Grazie per il link. –

7

Sembra jQuery 1.5 appena trasferita a UglifyJS:

Inoltre con questo interruttore abbiamo trasferiti utilizzando UglifyJS dal Google Closure Compiler. Abbiamo visto alcuni miglioramenti alle dimensioni dei file solidi durante l'utilizzo, quindi siamo abbastanza contenti con l'opzione.

+0

Grazie per aver postato questo. Non ne avevo mai sentito parlare! – Sonny

+0

È più veloce e comprime più di YUI, e sicuramente non ha bisogno di installare Java per Closure Compiler. – rxgx

+0

Non più vero: http://docs.jquery.com/Frequently_Asked_Questions#How_do_I_compress_my_code.3F – SeanDowney

2

a partire da ottobre 2012, si presenta come YUI Compressor è ora deprecato, o per lo meno non è più sta per essere usato in YUI: http://www.yuiblog.com/blog/2012/10/16/state-of-yui-compressor/

+1

YUI Compressor è ancora in fase di sviluppo (ultima versione maggio 2013): http: //www.yuiblog.com/blog/2013/05/16/yuicompressor-2-4-8-released/https://github.com/yui/yuicompressor – benebun

Problemi correlati