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] セクションのラジオボタンをクリックします。
Closure Compiler Service API
Closure Compiler サービス API でコンパイル レベルを設定するには、compilation_level
という名前のリクエスト パラメータを WHITESPACE_ONLY
、SIMPLE_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_ONLY
、SIMPLE
、または ADVANCED
を指定します。次に例を示します。
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js