Níveis de compilação do Closure Compiler

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. O ADVANCED_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 com ADVANCED_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