Closure Compiler ti consente di scegliere tra tre livelli di compilazione, dalla semplice rimozione di spazi bianchi e commenti a trasformazioni aggressive del codice.
WHITESPACE_ONLY
Il livello di compilazione WHITESPACE_ONLY
rimuove i commenti
dal codice, nonché interruzioni di riga, spazi non necessari,
punteggiatura superflua (come parentesi e punti e virgola) e altri
spazi vuoti. Il JavaScript di output è funzionalmente identico al JavaScript di origine.
La transpilation delle funzionalità del linguaggio si verifica comunque se la modalità della lingua di output richiesta è diversa dalla modalità della lingua di input.
Vedi --language_in
e --language_out
in
Flag e opzioni.
Questo livello di compilazione fornisce la compressione minima dei tre livelli.
SIMPLE_OPTIMIZATIONS
Il livello di compilazione SIMPLE_OPTIMIZATIONS
esegue
la stessa rimozione di spazi vuoti e commenti
di WHITESPACE_ONLY
, ma esegue anche ottimizzazioni
all'interno di espressioni e funzioni, inclusa la ridenominazione di variabili
locali e parametri di funzione con nomi più brevi. Se rinomini le variabili con nomi più brevi, il codice diventa molto più piccolo. Poiché il livello SIMPLE_OPTIMIZATIONS
rinomina solo i simboli locali delle funzioni, non
interferisce con l'interazione tra il codice JavaScript compilato e
altro codice JavaScript.
La compilazione con SIMPLE_OPTIMIZATIONS
preserva sempre
la funzionalità di JavaScript sintatticamente valido, a condizione che
il codice non acceda alle variabili locali utilizzando nomi di stringhe (ad esempio
utilizzando istruzioni eval()
o chiamando
toString sulle funzioni).
SIMPLE_OPTIMIZATIONS
è il livello di compilazione predefinito.
ADVANCED_OPTIMIZATIONS
Il livello di compilazione ADVANCED_OPTIMIZATIONS
esegue
le stesse trasformazioni di SIMPLE_OPTIMIZATIONS
, ma
aggiunge una serie di trasformazioni globali più aggressive per ottenere
la compressione più elevata di tutti e tre
i livelli. Il livello ADVANCED_OPTIMIZATIONS
comprime
JavaScript molto più di quanto sia possibile con altri strumenti.
Per attivare questa compressione
estrema, ADVANCED_OPTIMIZATIONS
fa ipotesi
forti sul codice compilato. Se il tuo codice non è conforme
a queste ipotesi, ADVANCED_OPTIMIZATIONS
produrrà
un codice che non viene eseguito.
Ad esempio, il codice compilato
con ADVANCED_OPTIMIZATIONS
potrebbe non funzionare con
il codice non compilato, a meno che tu non adotti misure speciali per garantire
l'interoperabilità. Se non contrassegni le funzioni e le proprietà esterne a cui viene fatto riferimento nel codice, Closure Compiler rinominerà in modo inappropriato i riferimenti nel codice, causando mancata corrispondenza tra i nomi nel codice e nel codice esterno.
Per saperne di più su come preparare il codice
per ADVANCED_OPTIMIZATIONS
,
leggi Compilazione avanzata ed
extern.
Le trasformazioni ADVANCED_OPTIMIZATIONS
includono:
- Rinomina più aggressiva:
La compilazione con
SIMPLE_OPTIMIZATIONS
rinomina solo i parametri e le variabili all'interno delle funzioni.ADVANCED_OPTIMIZATIONS
rinomina anche variabili globali, nomi di funzioni e proprietà. - Rimozione del codice inutilizzato:
La compilazione con
ADVANCED_OPTIMIZATIONS
rimuove il codice dimostrabilmente irraggiungibile. Questa funzionalità è particolarmente utile in combinazione con librerie di grandi dimensioni. Se utilizzi solo alcune funzioni di un file di libreria di grandi dimensioni, il compilatore può rimuovere tutto tranne queste funzioni dall'output. - global inlining:
La compilazione con
ADVANCED_OPTIMIZATIONS
sostituisce alcune chiamate di funzione con il corpo della funzione. Questa trasformazione è nota come "inlining". Il compilatore esegue l'inlining delle funzioni solo quando determina che l'inlining è sicuro e consente di risparmiare spazio. Compilazione conADVANCED_OPTIMIZATIONS
in linea anche le costanti e alcune variabili quando il compilatore determina che può farlo in modo sicuro.
Come impostare il livello di compilazione
Per impostare il livello di compilazione nell'applicazione Closure Compiler,
includi il flag della riga di comando --compilation_level
con
un valore
di WHITESPACE_ONLY
, SIMPLE
o ADVANCED
, come nel seguente comando:
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js