Livelli di compilazione compilatore

Closure Compiler ti consente di scegliere fra tre livelli di compilation, che vanno dalla semplice rimozione di spazi vuoti e commenti alle trasformazioni aggressive del codice.

solo spazio vuoto

Il livello di compilazione WHITESPACE_ONLY rimuove i commenti dal codice e le interruzioni di riga, gli spazi non necessari, la punteggiatura non necessaria (ad esempio parentesi e punti e virgola) e altri spazi vuoti. Dal punto di vista funzionale, il codice JavaScript di output è identico a JavaScript di origine.

La transcodifica delle funzionalità della lingua verrà eseguita anche se la modalità della lingua di output richiesta è diversa dalla modalità della lingua di inserimento. Visualizza --language_in e --language_out in Flag e opzioni.

Questo livello di compilazione fornisce la minore compressione dei tre livelli.

OTTIMIZZAZIONI_SEMPLICE

Il livello di compilazione SIMPLE_OPTIMIZATIONS esegue lo stesso spazio vuoto e la rimozione dei commenti di WHITESPACE_ONLY, ma esegue anche ottimizzazioni all'interno di espressioni e funzioni, tra cui ridenominazioni delle variabili locali e dei parametri delle funzioni in nomi più brevi. La ridenominazione delle variabili in nomi più brevi riduce notevolmente il codice. Poiché il livello SIMPLE_OPTIMIZATIONS rinomina solo i simboli che sono locali per le funzioni, questo non interferisce con l'interazione tra il codice JavaScript compilato e l'altro JavaScript.

La compilazione con SIMPLE_OPTIMIZATIONS conserva sempre la funzionalità di JavaScript sintatticamente valido, a condizione che il codice non acceda alle variabili locali usando i nomi delle stringhe (utilizzando le istruzioni eval(), ad esempio, o chiamando toString sulle funzioni).

SIMPLE_OPTIMIZATIONS è la compilazione predefinita.

OTTIMIZZAZIONI_AVANZATE

Il livello di compilazione ADVANCED_OPTIMIZATIONS esegue le stesse trasformazioni di SIMPLE_OPTIMIZATIONS, ma aggiunge una varietà di trasformazioni globali più aggressive per ottenere la massima compressione di tutti e tre i livelli. Il livello ADVANCED_OPTIMIZATIONS comprime JavaScript molto più di quanto sia possibile con altri strumenti.

Per abilitare questa compressione estrema, ADVANCED_OPTIMIZATIONS fa supposizioni assolute in merito al codice compilato. Se il tuo codice non è conforme a queste ipotesi, ADVANCED_OPTIMIZATIONS genererà 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 esegua passaggi speciali per garantire l'interoperabilità. Se non contrassegni funzioni e proprietà esterne a cui viene fatto riferimento nel codice, Closure Compiler rinomina in modo inappropriato i riferimenti nel codice, causando discrepanze tra i nomi nel codice e nel codice esterno.

Per scoprire di più su come preparare il codice per ADVANCED_OPTIMIZATIONS, leggi la sezione Compilation avanzata ed esterne.

Le trasformazioni di ADVANCED_OPTIMIZATIONS includono:

  • rinominazione più aggressiva:

    La compilazione con SIMPLE_OPTIMIZATIONS rinomina solo i parametri e le variabili all'interno delle funzioni. ADVANCED_OPTIMIZATIONS rinomina anche le variabili, i nomi delle funzioni e le proprietà globali.

  • rimozione di codici morti:

    La compilazione con ADVANCED_OPTIMIZATIONS rimuove il codice che è dimostrabile non raggiungibile. Ciò è particolarmente utile in combinazione con grandi librerie. Se utilizzi solo poche funzioni di un file della libreria di grandi dimensioni, il compilatore può rimuovere tutto tranne le funzioni dall'output.

  • inline globale:

    La compilazione con ADVANCED_OPTIMIZATIONS sostituisce alcune chiamate a funzioni con il corpo della funzione. Questa trasformazione è nota come "in linea". Il compilatore integra le funzioni solo quando determina che l'incorporamento è sicuro e consente di risparmiare spazio. La compilazione con ADVANCED_OPTIMIZATIONS include anche costanti e alcune variabili quando il compilatore determina che può farlo in sicurezza.

Come impostare il livello di compilazione

L'interfaccia utente, l'API e l'applicazione del servizio Closure Compiler hanno tutti metodi diversi per impostare compilation_level.

Nell'UI del servizio Closure Compiler

Per impostare il livello di compilazione nell'UI del servizio Closure Compiler, fai clic sui pulsanti di opzione nella sezione Ottimizzazione dell'interfaccia.

Screenshot dell'interfaccia utente

Nell'API del servizio Closure Compiler

Per impostare il livello di compilazione nell'API del servizio Closure Compiler, includi un parametro di richiesta denominato compilation_level con il valore WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS o ADVANCED_OPTIMIZATIONS, come nel seguente programma python:

#!/usr/bin/python2.4

import httplib, urllib, sys

params = urllib.urlencode([
    ('code_url', sys.argv[1]),
    ('compilation_level', 'ADVANCED_OPTIMIZATIONS'),
    ('output_format', 'text'),
    ('output_info', 'compiled_code'),
  ])

headers = { "Content-type": "application/x-www-form-urlencoded" }
conn = httplib.HTTPSConnection('closure-compiler.appspot.com')
conn.request('POST', '/compile', params, headers)
response = conn.getresponse()
data = response.read()
print data
conn.close()

Nell'applicazione Closure Compiler

Per impostare il livello di compilazione nell'applicazione Closure Compiler, includi il flag della riga di comando --compilation_level con un valore WHITESPACE_ONLY, SIMPLE o ADVANCED, come indicato di seguito:

java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js