Closure Compiler では、空白やコメントの単純な削除から積極的なコード変換まで、3 つのコンパイル レベルから選択できます。
WHITESPACE_ONLY
コンパイル レベル WHITESPACE_ONLY
では、コードからコメントが削除されるだけでなく、改行、不要なスペース、余分な句読点(かっこやセミコロンなど)、その他の空白文字も削除されます。出力された JavaScript は、ソース JavaScript と機能的に同じです。
リクエストされた出力言語モードが入力言語モードと異なる場合でも、言語機能のトランスパイルは行われます。フラグとオプションの --language_in
と --language_out
をご覧ください。
このコンパイル レベルでは、3 つのレベルの中で最も圧縮率が低くなります。
SIMPLE_OPTIMIZATIONS
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
用のコードを準備する方法について詳しくは、高度なコンパイルと externs をご覧ください。
ADVANCED_OPTIMIZATIONS
変換には次のものがあります。
- より積極的な名前変更:
SIMPLE_OPTIMIZATIONS
を使用したコンパイルでは、関数内のパラメータと変数の名前が変更されるだけです。ADVANCED_OPTIMIZATIONS
は、グローバル変数、関数名、プロパティの名前も変更します。 - デッドコードの削除:
ADVANCED_OPTIMIZATIONS
を使用したコンパイルでは、到達不能であることが証明可能なコードが削除されます。これは、大規模なライブラリと組み合わせると特に便利です。大きなライブラリ ファイルから少数の関数のみを使用する場合、コンパイラはそれらの関数以外のすべてを出力から削除できます。 - グローバル インライン化:
ADVANCED_OPTIMIZATIONS
を使用したコンパイルでは、一部の関数呼び出しが関数の本体に置き換えられます。この変換は「インライン化」と呼ばれます。コンパイラは、インライン化が安全でスペースを節約できると判断した場合にのみ、関数をインライン化します。ADVANCED_OPTIMIZATIONS
を使用したコンパイルでは、コンパイラが安全に実行できると判断した場合、定数と一部の変数がインライン化されます。
コンパイル レベルの設定方法
Closure Compiler アプリケーションでコンパイル レベルを設定するには、次のコマンドのように、--compilation_level
コマンドライン フラグに WHITESPACE_ONLY
、SIMPLE
、ADVANCED
のいずれかの値を指定します。
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js hello.js