O Frontend Compiler permite escolher entre três níveis de compilação, que vão desde a simples remoção de espaços em branco e comentários a transformações agressivas de código.
EM TEMPO ÚNICO
O nível de compilação WHITESPACE_ONLY
remove comentários do código e também quebras de linha, espaços desnecessários, pontuação irrelevante (como parênteses e pontos e vírgulas) e outros espaços em branco. O JavaScript de saída é funcionalmente idêntico ao JavaScript de origem.
A compilação de recursos de idioma ainda ocorrerá se o modo de idioma
de saída solicitado for diferente do modo de entrada.
Consulte --language_in
e --language_out
em Sinalizações e opções.
Esse nível de compilação fornece a menor compactação dos três níveis.
SIMPLE_OTIMIZAÇÕES
O nível de compilação SIMPLE_OPTIMIZATIONS
executa a mesma remoção de espaços em branco e comentários que WHITESPACE_ONLY
, mas também realiza otimizações em expressões e funções, incluindo a renomeação de variáveis locais e parâmetros de funções 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 outro JavaScript.
A compilação com SIMPLE_OPTIMIZATIONS
sempre preserva
a funcionalidade do JavaScript com sintaxe válida, desde que
o código não acesse variáveis locais usando nomes de strings (por
exemplo, instruções eval()
ou chamando
toString em funções).
SIMPLE_OPTIMIZATIONS
é o nível de compilação padrão.
OTIMIZAÇÃO_AVANÇADA
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 conseguir a compactação mais alta de todos os três níveis. O nível ADVANCED_OPTIMIZATIONS
compacta
o JavaScript muito mais 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 em conformidade
com essas suposições, ADVANCED_OPTIMIZATIONS
produzirá
código que não será executado.
Por exemplo, o código compilado
com ADVANCED_OPTIMIZATIONS
pode não funcionar com
código descompilado, a menos que você tome medidas especiais para garantir a
interoperabilidade. Se você não sinalizar funções externas e
propriedades referenciadas no código, o Frontend Compiler
vai renomear as referências no seu código de modo inadequado, causando
incompatibilidades entre os nomes no seu código e no código externo.
Para saber mais sobre como preparar o código
para ADVANCED_OPTIMIZATIONS
,
leia Compilação avançada e
externas.
As transformações ADVANCED_OPTIMIZATIONS
incluem:
- renomeação mais agressiva:
A compilação com
SIMPLE_OPTIMIZATIONS
apenas renomeia parâmetros e variáveis dentro de funções.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 está comprovadamente inacessível. Isso é especialmente útil quando usado com bibliotecas grandes. 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. - inline inline:
A compilação com
ADVANCED_OPTIMIZATIONS
substitui algumas chamadas de função pelo corpo da função. Essa transformação é conhecida como "inline". O compilador só faz isso in-line quando determina que a inserção inline é segura e economiza espaço. A compilação comADVANCED_OPTIMIZATIONS
também in-line constantes e algumas variáveis quando o compilador determinar que isso pode fazer isso com segurança.
Como definir o nível de compilação
A IU do serviço do Frontend Compiler, a API
e o aplicativo têm métodos diferentes para definir
compilation_level
.
Na IU de serviço do Frontend Compiler
Para definir o nível de compilação na IU do serviço do Compile Compiler, clique nos botões de opção na seção Optimization da interface.
Na API de serviço do Frontend Compiler
Para definir o nível de compilação na API de serviço do Frontend Compiler,
inclua um parâmetro de solicitação chamado compilation_level
com um valor de
WHITESPACE_ONLY
, SIMPLE_OPTIMIZATIONS
,
ou ADVANCED_OPTIMIZATIONS
, como no seguinte
programa 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()
No aplicativo Compile Compiler
Para definir o nível de compilação no aplicativo Frontend Compiler,
inclua a sinalização 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