Níveis de compilação do compilador de fechamento

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

Captura de tela da IU

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