Domande frequenti


Che cos'è il Closure Compiler? Perché dovrei utilizzarlo?
Il Closure Compiler è uno strumento per velocizzare il download e l'esecuzione di JavaScript. Puoi utilizzare il Closure Compiler per ridurre le dimensioni dei file JavaScript e renderli più efficienti.
Qual è la differenza tra il Closure Compiler e gli altri compressori JavaScript disponibili?

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

Nella modalità Semplice, il Closure Compiler dovrebbe essere in grado di fare meglio di altri strumenti perché usa analisi simili a quelle del compilatore per trovare altri modi per ridurre al minimo le dimensioni del codice. Ad esempio, il compilatore Closure può incorporare funzioni utilizzate in poche occorrenze, riutilizzare i nomi delle variabili e pre-calcolare espressioni costanti.

In modalità avanzata, il componente Closure Compiler può utilizzare anche le annotazioni di tipo aggiunto per individuare bug difficili da individuare.

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

Sì. Closure Compiler legge il codice JavaScript valido e genera JavaScript valido, in modo che tu possa applicarlo a un file JavaScript prima o dopo aver eseguito il file tramite un minificatore diverso.

Ricorda che Closure Compiler e altri minificatori potrebbero avere aspettative sul codice in arrivo. Un minificatore che rimuove i commenti potrebbe rimuovere le licenze o le informazioni di annotazione necessarie a causa di un altro strumento, ad esempio.

Come posso eseguire il debug del codice JavaScript prodotto da Closure Compiler?
Se il codice compilato genera errori o mostra comportamenti imprevisti, puoi utilizzare Maps di origine 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 visualizzare il codice sorgente originale invece di quello compilato. Per fare in modo che il compilatore Closure produca una mappa di origine, 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
Se utilizzi un browser che supporta le mappe di origine (come Chrome o Firefox), puoi impostare i punti di interruzione come faresti per il codice non compilato e gli strumenti per sviluppatori del browser mostreranno la riga di codice corrispondente nella sorgente originale. Per ulteriori informazioni sugli strumenti per sviluppatori di Chrome, incluse quelle sulle mappe di origine, consulta la pagina Debug di JavaScript.
Il compilatore crea un compromesso tra la velocità di esecuzione della mia applicazione e le dimensioni del codice di download?
Sì. Ogni compromessore che esegue l'ottimizzazione garantisce dei vantaggi. Alcune ottimizzazioni delle dimensioni introducono costi generali di minore entità. Tuttavia, gli sviluppatori del Closure Compiler hanno fatto attenzione a non introdurre un runtime aggiuntivo significativo. Alcune ottimizzazioni del compilatore riducono anche il tempo di esecuzione (vedi la domanda successiva).
Il compilatore ottimizza la velocità?
Nella maggior parte dei casi, un codice più piccolo è più veloce, dato che il tempo di download è in genere il fattore di velocità più importante nelle applicazioni web. Le ottimizzazioni che riducono le ridondanze accelerano anche l'esecuzione del codice.
Esistono limitazioni relative alle dimensioni dei file che possono essere compilati?
La dimensione massima del file di compilazione è del servizio web, ma non l'applicazione autonoma di compilazione.
Il compilatore Closure è disponibile per tutte le piattaforme?
Il compilatore è scritto in Java, quindi può essere eseguito ovunque.
Il compilatore può elaborare JavaScript legale?
In gran parte, Alcuni costrutti JavaScript, tra cui eval() e with(), possono invalidare le ipotesi su cui si basano le trasformazioni del compilatore.
Che cosa devo sapere sullo sviluppo web per utilizzare il Closure Compiler?
Il Closure Compiler è uno strumento per lo sviluppo di JavaScript, quindi devi sapere come programmare in JavaScript per utilizzare il compilatore. Tuttavia, chiunque utilizzi JavaScript può trarre vantaggio dall'utilizzo del componente Closure Compiler.
Come funziona il compilatore Closure con la libreria Closure?
Il Closure Compiler fornisce controlli e ottimizzazioni speciali per il codice che utilizza la Closure Library. Inoltre, il servizio di compilazione Closure può includere automaticamente i file della libreria Closure. Find Way Way Closure descrive la sintassi per dichiarare le parti di Closure necessarie. Consulta il riferimento API per informazioni sull'utilizzo della libreria di chiusura con l'API. Per utilizzare la Closure Library con l'applicazione Closure Compiler, devi prima scaricare la Closure Library. Il supporto per la libreria di chiusura è abilitato nell'applicazione di compilazione per impostazione predefinita.
Il mio codice smette di funzionare o il compilatore genera errori quando compilo con ADVANCED_OPTIMIZATIONS. Come mai?
L'utilizzo della modalità avanzata richiede in genere alcune operazioni di preparazione e modifica del codice. Compilation avanzata ed esterne spiegano come assicurarti che il codice funzioni con ADVANCED_OPTIMIZATIONS.
Perché esistono script a riga casuale negli script compilati?
Il Closure Compiler aggiunge intenzionalmente interruzioni di riga ogni 500 caratteri circa. I firewall e i proxy a volte danneggiano o ignorano i file JavaScript di grandi dimensioni con righe molto lunghe. L'aggiunta di interruzioni di riga ogni 500 caratteri evita questo problema. La rimozione delle interruzioni di riga non ha alcun effetto sulla semantica di uno script. L'impatto sulle dimensioni del codice è minimo e il compilatore ottimizza il posizionamento dell'interruzione di riga in modo che la sanzione delle dimensioni del codice sia ancor più piccola quando i file sono compressi in formato gzip.
Sono presenti notifiche di violazione del copyright o testo di licenza open source che devono essere presenti nel mio codice sorgente. Come faccio a evitare che Closure Compiler rimuova il testo?
Il componente Closure supporta il tag @license JSDoc. Aggiungi il tag @license a qualsiasi commento JSDoc per mantenere il commento nell'output del compilatore. Per ulteriori informazioni, consulta la sezione Annotazione di JavaScript per il compilatore Closure.