Domande frequenti


Che cos'è Closure Compiler? Perché dovrei utilizzarlo?
Closure Compiler è uno strumento per velocizzare il download e l'esecuzione di JavaScript. Puoi utilizzare Closure Compiler per ridurre le dimensioni dei file JavaScript e renderli più efficienti.
In che modo Closure Compiler si differenzia dagli altri compressori JavaScript disponibili?

In genere, Closure Compiler dovrebbe soddisfare o superare la compressione di altri strumenti di minimizzazione del codice e migliorare i tempi di download della tua applicazione web. Inoltre, Closure Compiler può aiutarti a trovare errori di sintassi durante lo sviluppo (anziché durante i test) e identificare pattern di codice potenzialmente buggati.

In modalità semplice, Closure Compiler dovrebbe essere in grado di fare meglio di altri strumenti perché utilizza un'analisi simile a quella del compilatore per trovare altri modi per ridurre al minimo le dimensioni del codice. Ad esempio, Closure Compiler può incorporare le funzioni utilizzate solo in pochi casi, riutilizzare i nomi delle variabili e precalcolare le espressioni costanti.

In modalità avanzata, Closure Compiler può anche utilizzare le annotazioni dei tipi aggiunte per trovare bug difficili da individuare.

Closure Compiler può compilare JavaScript incorporato in HTML?
No. Closure Compiler funziona solo sui file che contengono solo JavaScript.
Posso utilizzare Closure Compiler insieme ad altri minificatori JavaScript?

Sì. Closure Compiler legge qualsiasi codice JavaScript valido e genera codice JavaScript valido, quindi puoi applicare Closure Compiler a un file JavaScript prima o dopo averlo eseguito tramite un altro minifier.

Tieni presente che Closure Compiler e altri minificatori potrebbero avere aspettative sul codice in entrata. Un minifier che rimuove i commenti potrebbe eliminare le licenze o le informazioni sulle annotazioni necessarie a un altro strumento, ad esempio.

Come faccio a eseguire il debug del codice JavaScript prodotto da Closure Compiler?
Se il codice compilato genera errori o presenta un comportamento imprevisto, puoi utilizzare le mappe delle origini per eseguire il debug del problema. Una mappa di origine fornisce una mappatura tra il codice compilato e il codice sorgente originale, in modo che gli strumenti per sviluppatori del browser possano mostrare il codice sorgente originale anziché il codice compilato. Per fare in modo che Closure Compiler produca una mappa delle origini, passa il flag --create_source_map nella riga di comando. Ad esempio:
$ java -jar compiler.jar --js example.js --create_source_map ./example-map --js_output_file example-compiled.js
Poi, se utilizzi un browser che supporta le mappe delle origini (ad esempio Chrome o Firefox), puoi impostare i punti di interruzione proprio come faresti per il codice non compilato e gli strumenti per sviluppatori del browser mostreranno la riga di codice corrispondente nell'origine originale. Per ulteriori informazioni sugli strumenti per sviluppatori di Chrome, incluse informazioni sulle mappe delle origini, consulta Debug di JavaScript.
Il compilatore fa qualche compromesso tra la velocità di esecuzione della mia applicazione e le dimensioni del codice di download?
Sì. Qualsiasi compilatore di ottimizzazione fa dei compromessi. Alcune ottimizzazioni delle dimensioni introducono piccoli sovraccarichi di velocità. Tuttavia, gli sviluppatori di Closure Compiler hanno prestato attenzione a non introdurre un runtime aggiuntivo significativo. Alcune ottimizzazioni del compilatore riducono persino il tempo di esecuzione (vedi la domanda successiva).
Il compilatore esegue l'ottimizzazione per la velocità?
Nella maggior parte dei casi, un codice più piccolo è più veloce, poiché il tempo di download è solitamente il fattore di velocità più importante nelle applicazioni web. Ottimizzazioni che riducono le ridondanze e velocizzano anche il tempo di esecuzione del codice.
Esistono limitazioni alle dimensioni dei file che possono essere compilati?
Il servizio web di compilazione ha una dimensione massima dei file, ma l'applicazione di compilazione autonoma no.
Closure Compiler è disponibile per tutte le piattaforme?
Il compilatore è scritto in Java, quindi può essere eseguito ovunque sia possibile eseguire Java.
Il compilatore può elaborare qualsiasi JavaScript valido?
Per lo più. Alcuni costrutti JavaScript, tra cui eval() e with(), possono invalidare le ipotesi su cui si basano le trasformazioni del compilatore.
Quante conoscenze di sviluppo web devo avere per utilizzare Closure Compiler?
Closure Compiler è uno strumento per lo sviluppo JavaScript, quindi devi sapere come programmare in JavaScript per utilizzare il compilatore. Tuttavia, chiunque utilizzi JavaScript può trarre vantaggio dall'utilizzo di Closure Compiler.
Come funziona Closure Compiler con la libreria Closure?
Closure Compiler fornisce controlli e ottimizzazioni speciali per il codice che utilizza la libreria Closure. Inoltre, il servizio Closure Compiler può includere automaticamente i file della libreria Closure. Finding Your Way around Closure descrive la sintassi per dichiarare le parti di Closure di cui hai bisogno. Consulta il riferimento API per informazioni sull'utilizzo della libreria Closure con l'API. Per utilizzare la libreria Closure con l'applicazione Closure Compiler, devi prima scaricare la libreria Closure. Il supporto della libreria Closure è attivato per impostazione predefinita nell'applicazione del compilatore.
Il mio codice smette di funzionare o il compilatore produce errori quando compilo con ADVANCED_OPTIMIZATIONS. Perché?
L'utilizzo della modalità avanzata richiede in genere una preparazione e modifiche al codice. Compilazione avanzata e variabili esterne spiega come assicurarsi che il codice funzioni con ADVANCED_OPTIMIZATIONS.
Perché nei copioni compilati sono presenti avanzamenti riga casuali?
Closure Compiler aggiunge intenzionalmente interruzioni di riga ogni 500 caratteri circa. A volte, i firewall e i proxy corrompono o ignorano i file JavaScript di grandi dimensioni con righe molto lunghe. L'aggiunta di interruzioni di riga ogni 500 caratteri impedisce questo problema. La rimozione delle interruzioni di riga non influisce sulla semantica di uno script. L'impatto sulle dimensioni del codice è minimo e il compilatore ottimizza il posizionamento degli interruzioni di riga in modo che la penalità per le dimensioni del codice sia ancora più piccola quando i file vengono compressi con Gzip.
Ho avvisi di copyright o testo di licenza open source che devono essere visualizzati nel mio codice sorgente. Come faccio a impedire a Closure Compiler di rimuovere questo testo?
Closure Compiler supporta il tag JSDoc @license. Aggiungi il tag @license a qualsiasi commento JSDoc per conservare il commento nell'output del compilatore. Per saperne di più, consulta la sezione Annotazione di JavaScript per Closure Compiler.