googleが出してるjavascriptの圧縮ツールClosure Compilerには
- WHITESPACE_ONLY
- SIMPLE_OPTIMIZATINS
- ADVANCED_OPTIMIZATIONS
の三つのレベル設定があります。でもそれぞれどのような圧縮をしてくれるのかよくわかりませんね。そこで調べました。下記URLの意訳です。
Closure Compiler Compilation Levels - Closure Compiler - Google Code
SIMPLE_OPTIMIZATIONS
- WHITESPACE_ONLYと同じようにコメントや空白を削除
- ローカル変数や関数のパラメータを短い名前に変更する
- ローカルの変数や関数のみ変更するので、他のJavaScriptファイルとの相互的な利用を邪魔しない
- SIMPLE_OPTIMIZATIONSでコンパイルしても文法的にはvalidなJavaScriptになる(例えばeval()でローカル変数にアクセスしたりはしない)。
- デフォルトのコンパイルレベル
ADVANCED_OPTIMIZATIONS
このレベルはコードの推測をおこなうので、コードがその推測に沿っていないとうまく実行できないコードが生成されたりする。
例えば、このレベルでコンパイルしたコードはコンパイルしてないコードと同時に使うとうまく動かないかもしれない。圧縮するコードが外部の関数やプロパティを参照していない時に、Closure Compilerは不適切な名前変更をして(名前がかぶったりするってことかな?)してうまく動かなくなる。
まとめると
- SIMPLE_OPTIMIZATIONSの圧縮に加えて、global変数や関数やプロパティの名前も変更する
- 使わないコードは削除する。大きなライブラリを使う時などに有効。
- いくつかの関数呼び出しを関数の実態に置き換える。この変換は"inlining"として知られてる。inliningしても安全でコードが短くなるときのみそうしてる。定数的に扱われている変数なども同じように置き換えられる。
Closure Compiler Documentation - Closure Compiler - Google Code