Livelli di compilazione di Closure Compiler

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 con ADVANCED_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