Closure Compiler のコンパイル レベル

Closure Compiler では、空白やコメントの単純な削除から積極的なコード変換まで、3 つのレベルのコンパイルから選択できます。

空白のみ

WHITESPACE_ONLY コンパイル レベルでは、コードからコメントが削除されるほか、改行、不要なスペース、不要な句読点(丸かっこやセミコロンなど)、その他の空白文字が削除されます。出力 JavaScript は機能的にソース JavaScript と同じです。

リクエストされた出力言語モードが入力言語モードと異なる場合は、引き続き言語機能のトランスパイルが行われます。フラグとオプション--language_in--language_out をご覧ください。

このコンパイル レベルにより、3 つのレベルの圧縮率が最小限になります。

シンプルな最適化

SIMPLE_OPTIMIZATIONS コンパイル レベルは、WHITESPACE_ONLY と同じ空白文字とコメント削除を実行しますが、式や関数内で、ローカル変数や関数パラメータの名前をより短い名前に変更することも含めて最適化を行います。変数の名前を短い名前に変更することで、コードが大幅に少なくなります。SIMPLE_OPTIMIZATIONS レベルでは、関数にローカルなシンボルの名前のみが変更されるため、コンパイルされた JavaScript と他の JavaScript の間のやり取りを妨げません。

SIMPLE_OPTIMIZATIONS でコンパイルすると、コードが文字列名を使用してローカル変数にアクセスしない(たとえば、eval() ステートメントを使用する、または関数で toString を呼び出す)という意味では、構文的に有効な JavaScript の機能が保持されます。

SIMPLE_OPTIMIZATIONS はデフォルトのコンパイル レベルです。

ADVANCED_OPTIMIZATIONS

ADVANCED_OPTIMIZATIONS コンパイル レベルは SIMPLE_OPTIMIZATIONS と同じ変換を行いますが、より積極的なグローバル変換を追加して、3 つのレベルすべての圧縮率が最大になります。ADVANCED_OPTIMIZATIONS レベルでは、他のツールよりも JavaScript が大幅に圧縮されます。

この極端な圧縮を有効にするために、ADVANCED_OPTIMIZATIONS はコンパイル済みコードを厳密に想定します。コードがこれらの前提条件に準拠していない場合、ADVANCED_OPTIMIZATIONS は実行されないコードを生成します。

たとえば、相互運用性を確保するための特別な手順を行わない限り、ADVANCED_OPTIMIZATIONS を使用してコンパイルされたコードは、コンパイルされていないコードでは動作しない可能性があります。コード内で参照されている外部関数とプロパティにフラグを設定していない場合、Closure Compiler はコード内の参照の名前を不適切に変更し、コード内の名前と外部コード内での不一致を引き起こします。

ADVANCED_OPTIMIZATIONS のコードを準備する方法の詳細については、高度なコンパイルとエクスターンをご覧ください。

ADVANCED_OPTIMIZATIONS 変換には次のようなものがあります。

  • 名前の変更:

    SIMPLE_OPTIMIZATIONS でコンパイルすると、関数内のパラメータと変数の名前のみが変更されます。ADVANCED_OPTIMIZATIONS は、グローバル変数、関数名、プロパティの名前も変更します。

  • 不要なコードの削除:

    ADVANCED_OPTIMIZATIONS でコンパイルすると、アクセスできないコードが削除されます。これは、大規模なライブラリと組み合わせて使用すると特に便利です。サイズの大きいライブラリ ファイル内の関数をいくつか使用した場合、コンパイラはそれらの関数以外のすべての関数を出力から削除できます。

  • グローバル インライン化:

    ADVANCED_OPTIMIZATIONS でコンパイルすると、一部の関数呼び出しが関数の本体に置き換えられます。この変換は「インライン」と呼ばれます。コンパイラは、インラインが安全でスペースを節約できると判断した場合にのみ、関数をインライン化します。ADVANCED_OPTIMIZATIONS でコンパイルすると、コンパイラが安全に行えると判断した場合、定数と一部の変数がインライン化されます。

コンパイル レベルを設定する方法

Closure Compiler サービスの UI、サービス API、アプリには、compilation_level を設定するさまざまなメソッドがあります。

Closure Compiler サービスの UI

Closure Compiler サービス UI でコンパイル レベルを設定するには、インターフェースの [Optimization] セクションのラジオボタンをクリックします。

UI のスクリーンショット

Closure Compiler Service API

Closure Compiler サービス API でコンパイル レベルを設定するには、compilation_level という名前のリクエスト パラメータを WHITESPACE_ONLYSIMPLE_OPTIMIZATIONS、または ADVANCED_OPTIMIZATIONS の値とともに追加します。次の 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()

Closure Compiler アプリで

Closure Compiler アプリでコンパイル レベルを設定するには、コマンドライン フラグ --compilation_level に値 WHITESPACE_ONLYSIMPLE、または ADVANCED を指定します。次に例を示します。

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