Google Closure
Google ClosureはGoogleが提供するJavaScriptのビルド・ツールです。JavaScriptのソース・コードに対して高度な最適化が行われるため、圧縮率が高いと言われています。Google Closureは特定のJavaScriptライブラリ専用のシステムではなく、任意のJavaScriptに対して適用できるようになっています。Dojoのビルド・システムもバージョン1.4からGoogle Closureを利用できるようになりました。ただし、Dojoのビルド・システム自体にはGoogle Closureは同梱されていませんので、Googleから直接ダウンロードし、Dojoのビルド・システムに組み込む必要があります。以下にその手順を説明します。
- Java 6を用意します。Closureコンパイラを動作させるためには必ずJava 6を使用してください。
-
Closureコンパイラを下記のサイトからダウンロードします。
http://code.google.com/p/closure-compiler/downloads/list - compiler.jarを適当なフォルダ(例:dojo/util/closurecompiler/)に置きます。
-
dojo/util/buildscripts/build.batを(必要に応じてバックアップを取った上で)次のように書き換えます。compiler.jarへのクラスパスは適宜調整してください。
java -classpath ../shrinksafe/js.jar;../closurecompiler/compiler.jar org.mozilla.javascript.tools.shell.Main build.js %*
-
ビルドを実行します。以下はその例です。
> build profile=standard action=release optimize=closure layerOptimize=closure
表1、表2はそれぞれDojoビルド・システムの標準コンパイラであるShrinksafeとClosureを使って"standard"プロファイルでビルドした場合の圧縮率を調べた結果です。
ファイル | サイズ | ビルド後 | gzip後 | ビルド後圧縮率 | gzip後圧縮率 |
---|---|---|---|---|---|
dojo.js | 386,325 | 89,283 | 30,321 | 23.11% | 7.85% |
dijit-all | 842,667 | 356,017 | 92,647 | 42.25% | 10.99% |
DataGrid.js | 514,365 | 225,863 | 61,236 | 43.91% | 11.91% |
Chart2D.js | 443,744 | 200,769 | 52,227 | 45.24% | 11.77% |
ファイル | サイズ | ビルド後 | gzip後 | ビルド後圧縮率 | gzip後圧縮率 |
---|---|---|---|---|---|
dojo.js | 386,325 | 73,631 | 26,562 | 19.06% | 6.88% |
dijit-all | 842,667 | 323,986 | 83,276 | 38.45% | 9.88% |
DataGrid.js | 514,365 | 201,475 | 54,187 | 39.17% | 10.53% |
Chart2D.js | 443,744 | 175,335 | 46,970 | 39.51% | 10.58% |
多くの場合、webアプリケーションの本番運用環境ではJavaScript等のファイルはサーバー側でgzip圧縮してクライアントへ送信されるため、ビルド結果をgzipしたサイズがパフォーマンスの目安となります。表2、表3から、Closureのビルド結果はShrinksafeに比べて約10%程度サイズが小さいことが分かります。また、Dojoのビルド・システムからClosureを使う場合は、Closureの"simple"最適化モードしかサポートしていません。本来のClosureには"advanced"最適化モードが存在し、グローバル変数名の短縮、使用されないコードの削除、関数のインライン化などより大胆な最適化を施します。将来それが利用できるようになった場合はさらなるサイズ圧縮が期待できると思われます。