O Closure Compiler permite escolher entre três níveis de compilação, que vão desde a remoção simples de espaços em branco e comentários até transformações agressivas de código.
WHITESPACE_ONLY
O nível de compilação WHITESPACE_ONLY
remove comentários
do seu código, além de quebras de linha, espaços desnecessários,
pontuação desnecessária (como parênteses e ponto e vírgula) e outros
espaços em branco. O JavaScript de saída é funcionalmente idêntico ao JavaScript de origem.
A transcompilação de recursos de linguagem ainda vai ocorrer se o modo de linguagem de saída solicitado for diferente do modo de linguagem de entrada.
Consulte --language_in
e --language_out
em
Sinalizações e opções.
Esse nível de compilação oferece a menor compressão dos três níveis.
SIMPLE_OPTIMIZATIONS
O nível de compilação SIMPLE_OPTIMIZATIONS
realiza a mesma remoção de espaços em branco e comentários que o WHITESPACE_ONLY
, mas também faz otimizações em expressões e funções, incluindo a renomeação de variáveis locais e parâmetros de função para nomes mais curtos. Renomear variáveis para nomes mais curtos torna o código significativamente menor. Como o nível SIMPLE_OPTIMIZATIONS
renomeia apenas símbolos locais para funções, ele não interfere na interação entre o JavaScript compilado e outros JavaScripts.
A compilação com SIMPLE_OPTIMIZATIONS
sempre preserva
a funcionalidade do JavaScript sintaticamente válido, desde que
o código não acesse variáveis locais usando nomes de strings (por
exemplo, usando instruções eval()
ou chamando
toString em funções).
SIMPLE_OPTIMIZATIONS
é o nível de compilação padrão.
ADVANCED_OPTIMIZATIONS
O nível de compilação ADVANCED_OPTIMIZATIONS
realiza as mesmas transformações que SIMPLE_OPTIMIZATIONS
, mas adiciona uma variedade de transformações globais mais agressivas para alcançar a maior compactação de todos os três níveis. O nível ADVANCED_OPTIMIZATIONS
comprime
JavaScript muito além do que é possível com outras ferramentas.
Para ativar essa compactação
extrema, o ADVANCED_OPTIMIZATIONS
faz suposições
fortes sobre o código compilado. Se o código não estiver de acordo com essas proposições, o ADVANCED_OPTIMIZATIONS
vai gerar um código que não será executado.
Por exemplo, o código compilado com ADVANCED_OPTIMIZATIONS
pode não funcionar com código não compilado, a menos que você tome medidas especiais para garantir a interoperabilidade. Se você não sinalizar funções e propriedades externas referenciadas no seu código, o Closure Compiler vai renomear de forma inadequada as referências no código, causando incompatibilidades entre os nomes no seu código e no código externo.
Para saber mais sobre como preparar seu código
para ADVANCED_OPTIMIZATIONS
,
leia Compilação avançada e
externos.
As transformações ADVANCED_OPTIMIZATIONS
incluem:
- renomeação mais agressiva:
A compilação com
SIMPLE_OPTIMIZATIONS
apenas renomeia parâmetros e variáveis em funções. OADVANCED_OPTIMIZATIONS
também renomeia variáveis globais, nomes de funções e propriedades. - remoção de código morto;
A compilação com
ADVANCED_OPTIMIZATIONS
remove o código que é comprovadamente inacessível. Isso é especialmente útil em combinação com grandes bibliotecas. Se você usar apenas algumas funções de um arquivo de biblioteca grande, o compilador poderá remover tudo, exceto essas funções, da saída. - inlining global:
A compilação com
ADVANCED_OPTIMIZATIONS
substitui algumas chamadas de função pelo corpo da função. Essa transformação é conhecida como "inlining". O compilador só inverte funções quando determina que a inversão é segura e economiza espaço. A compilação comADVANCED_OPTIMIZATIONS
também in-line constantes e algumas variáveis quando o compilador determina que pode fazer isso com segurança.
Como definir o nível de compilação
Para definir o nível de compilação no aplicativo Closure Compiler,
inclua a flag de linha de comando --compilation_level
com
um valor
de WHITESPACE_ONLY
, SIMPLE
,
ou ADVANCED
, como no comando a seguir:
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js