38

Qualcuno ha compilato jQuery contro il nuovo compilatore Closure di Google?jQuery compilato con Google Closure Compiler

Sono stati segnalati enormi risparmi in termini di dimensioni del codice. Sono curioso di sapere qual è il vantaggio se jQuery è stato compilato con esso.

+0

Think I aspetterò Resig e la squadra di rilasciare una nuova versione -min o closured speciale. Non vorrei comprimere la libreria perché le funzionalità specifiche non funzionavano o non funzionavano come previsto. – Tom

+0

Il mio primo (e unico) voto negativo. La domanda non merita un voto se il PO non accetta una risposta (o almeno dichiara ciò che è inaccettabile sulle risposte offerte). Parte di ciò che fa una buona domanda è conoscere la soluzione accettata. – Karl

risposta

1

Non chiude solo minimizzare e rinominare i vars? jQuery ha già una versione .min. Minimizzare con la chiusura di nuovo sarà probabilmente minimo utile e potenzialmente pericoloso.

Modifica: l'ho appena fatto.

Compilation was a success! 

Original Size: 55.91KB (19.28KB gzipped) 
Compiled Size: 54.05KB (18.28KB gzipped) 
Saved 3.34% off the original size (5.18% off the gzipped size) 

Questo è in cima alla versione già estratto. C'è una demo qui: http://closure-compiler.appspot.com/home

+0

Sì, JQuery utilizza già un minificatore. Ho appena letto un articolo su come è stato ricompilato Prototype usando Closure, invece di YUI Compressor. La versione Closure di Prototype era del 60% più piccola di quella prodotta da YUI Compressor. È una cosa folle e creare per accelerare le applicazioni web. – Ted

+6

In teoria, è possibile combinare il javery con jQuery e chiudere la procedura con tutti i file '.click',' .each' ecc. Per ulteriori risparmi. – Tinister

+0

Ottima idea di tinister. – Jourkey

11

ho provato con jQuery jQuery 1.3.2

jQuery-1.3.2.min.js  57254 Bytes 
jQuery closure compiler 49730 Bytes 
----------------------------------- 
Reduced by    7524 Bytes 
Saved 13.31% off the original size 
Saved 10.87% off the gzipped size 

guadagno di circa 7KB

Ma riporta anche 15 Avvertenze e non ho la prova se funziona ancora

6

Con ADVANCED_OPTIMIZATIONS spenta:

  • jquery-1.3.2.min.js: 572 54 byte
  • jquery-1.3.2.closure.js 55346 byte (-3,4%)
  • jquery-1.3.2.min.js.gz: 19680 bytes
  • jquery-1.3.2.closure.js .gz: 18666 byte (-5,2%)

Con ADVANCED_OPTIMIZATIONS attivato: non funziona non modificato. Con ADVANCED_OPTIMIZATIONS attivato e tutto quello che riesco a esportare esportato ... continua a non funzionare, e il codice è già di nuovo fino a 53466 byte (e 18785 gzip, ovvero in più del codice chiuso con gzip senza ADVANCED_OPTIMIZATIONS) quindi non sembra una proposta vincente.

+7

Il flag ADVANCED_OPTIMIZATIONS non si ottimizza per le dimensioni del file ma per la velocità di esecuzione (tenta di modificare il codice per farlo funzionare più velocemente, non per scaricare più velocemente). – Kekoa

+1

@Kekoa, da quello che ho letto [online] (http://code.google.com/closure/compiler/docs/api-tutorial3.html) e in [print] (http://books.google. com/books? id = p7uyWPcVGZsC & printsec = frontcover & source = gbs_ge_summary_r & cad = 0 # v = snippet & q = minification & f = false), sembra che la dimensione del file (e la velocità di download) sia l'obiettivo principale di ADVANCED_OPTIMIZATIONS e del compilatore in generale. – hyperslug

+0

La dimensione dei file di dimensioni ridotte spesso (ma non sempre) nel codice più veloce. La rimozione del codice morto e l'inlining servono a entrambi gli scopi. – Blaise

25

John Resig ha segnalato un bug sulle funzioni ricorsive quando ha tentato di compilare una notte di jQuery 1.4, quindi ci sono alcuni nodi da risolvere. Non userei un jQuery compilato con Closure Compiler senza essere sicuro che passi il testbed di jQuery.

http://code.google.com/p/closure-compiler/issues/detail?id=1&can=1#c2

+27

Sottolineando che, ora che jQuery 1.4 è stato rilasciato, i bug sono stati risolti e il compilatore di chiusura ora è il minificatore principale di jQuery :) – Matchu

+1

Solo una breve nota: risulta che chiamare il compilatore di chiusura è piuttosto semplicistico. Tra le altre cose, è un compilatore di ottimizzazione, rimuove il codice morto e fornisce utili avvisi in fase di compilazione attraverso l'analisi statica. –

2

Per curiosità, ho messo insieme un test SlickSpeed ​​delle ultime librerie Prototype e jQuery, rimpicciolito con YUI e chiusura. You can run the tests here.

Come altri hanno notato, la compilazione con ADVANCED_OPT non funziona ma se qualcuno vuole eseguire il lavoro, saremo lieti di aggiungere i risultati al test SlickSpeed.

+0

Questo link funziona ancora? –

+0

No, il link non funziona più. –

6

Il compilatore di chiusura elimina qualsiasi codice che non si utilizza effettivamente. La tipica pagina web utilizzerà solo una piccola parte delle funzioni di jQuery, quindi il maggior beneficio deriverà dalla compilazione del codice insieme alla versione completa di jQuery.

+6

Ma, ovviamente, si perde qualsiasi beneficio dal codice jQuery che viene memorizzato nella cache sul computer dell'utente (se lo è). – Nosredna

+1

In realtà, l'ultima volta che ho controllato Closure non ha effettivamente rimosso le funzioni inutilizzate da jQuery, penso perché non sono effettivamente definite come funzioni separate. – DisgruntledGoat

+0

In tal caso, Closure Compiler non rimuoverà quasi tutto il codice quando si compila solo la libreria jQuery? –

1

Ho utilizzato la chiusura (con ADVANCED_OPTIMIZATIONS) per comprimere il codice javascript per un sito a pagina singola ospitato e ho visto un risparmio significativo rispetto al compressore YUI. Così ho iniziato anche a cercare di restringere jQuery per quel sito, dato che certamente non utilizza la libreria jerery di entier.

Ricevo avvisi ogni volta che eseguo jQuery attraverso il compilatore, principalmente indicando porzioni del codice che non vengono utilizzate. Ancora, il codice compilato non funziona. Il problema principale che vedo è che le cose non vengono esportate correttamente dal compilatore. Sono stato in grado di esportare facilmente le funzioni dal mio codice collegandole all'oggetto della finestra, ma non sono ancora riuscito a farlo con jQuery.

La buona notizia è che John Resig sta già sperimentando Closure. Sospetto che vedremo nuove versioni di entrambi compatibili nel prossimo futuro.

4

A partire da jQuery 1.4, il compilatore di chiusura di Google viene utilizzato come tecnica di minificazione predefinita per le versioni di jQuery. Tuttavia, jQuery utilizza solo le impostazioni SIMPLE_OPTIMIZATIONS. Il team di jQuery ha no plans to support ADVANCED_OPTIMIZATIONS.

+2

obsoleto: "Tuttavia, riteniamo di poter fare ancora meglio di così, e vorremmo offrire un modo automatico per qualsiasi utente di creare un file minimizzato in modo ottimale che includa sia il codice dell'applicazione che le parti necessarie di jQuery. collaborando con il team di Google Closure Compiler per vedere se potremmo utilizzare la sua opzione ADVANCED_OPTIMIZATIONS e avremo maggiori informazioni sui nostri progressi man mano che si sviluppano. " http://blog.jquery.com/2011/11/22/call-for-jquery-1-8-ideas/ –

0

jQuery non è compatibile (ancora) con il compilatore di chiusura in modalità avanzata. Sono d'accordo che sarebbe un'ottima cosa renderlo compatibile, perché la sua sintassi di concatenamento di metodi presta molto facilmente alla prototipazione della virtualizzazione per una velocità di esecuzione notevolmente migliorata.

Infatti, tra le popolari librerie JavaScript (diverse da Closure Library, ovvero), solo Dojo Toolkit è compatibile con la modalità di chiusura avanzata.

http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t

Problemi correlati