条件付きコンパイル
C言語には#ifdefなどのプリプロセッサ・ディレクティブが備わっており、条件によって異なるコンパイル結果を生成できます。dojoにも非常にシンプルではありますが条件に応じて異なるビルド結果を生成する手段が存在します。
exclude/includeディレクティブ
リスト6はexcludeStart/excludeEndディレクティブの使用例です。行が//から始まることから分かるように、このディレクティブはJavaScriptとしては単なるコメントですが、ビルド・ツールがこれを解釈します。excludeStart/excludeEndの第一引数は対応する両者のマッチングを調べるためのマーカーです。任意の文字列で構いませんが、対応するStartとEndで一致している必要があります。excludeStartの第二引数は条件式です。任意の論理式を記述できます。kwArgsオブジェクトにはbuildコマンドのコマンドラインで指定されたオプションの値が格納されています。
process: function(){ //>>excludeStart("marker1", kwArgs.noIE); if(dojo.isIE){ .... } //>>excludeEnd("marker1"); .... }
リスト6の例ではコマンドラインで指定されたnoIEオプションの値を条件としているので、例えば次のようにnoIE=trueを指定してビルドすると、excludeStartとexcludeEndで囲まれた範囲のコードがビルドから削除されます。
> build profile=myapp action=release noIE=true
同様にして、includeStart/includeEndディレクティブを使うと、条件を満たす場合のみそれらで囲まれた範囲のコードをビルドに含めることができます。
これらのディレクティブにはさまざまな用途が考えられますが、一例として、ブラウザの種類ごとに最適化された別々のビルドを用意し、サーバーがブラウザの種類を判定してそのブラウザ専用のビルドを送信するといった使い方が考えられます。使用ブラウザにとっては不要なコードを排除できるのでコードのスリム化に役立ちます。
webkitMobileオプション
iPhoneやAndroidで採用されているモバイル用webkitベース・ブラウザのために、dojo baseモジュールには次のようなコードが多数含まれています。
//>>excludeStart("webkitMobile", kwArgs.webkitMobile); .... //>>excludeEnd("webkitMobile");
これらは、モバイル用webkitベース・ブラウザでは不要なコードを囲んでいます。モバイル向けのアプリケーションでは特にパフォーマンスに対する要求が厳しい傾向にあります。もしそのアプリケーションをデスクトップ・ブラウザでも動かす必要がないのであれば、ビルド時に次のようにしてwebkitMobile=trueオプションを与えることで、モバイル用webkitベース・ブラウザに不要なコードが削除され、パフォーマンスを向上させることができます。
> build profile=myapp action=release webkitMobile=true