はじめに
2011年12月にDojoの1.7がリリースされました。1.7の目玉は、dojox.mobileによるiOSやAndroidなどのモバイル・デバイスのサポートの拡張、および、AMD(非同期モジュール定義=Asynchronous Module Definition)のフル・サポートなどがあります。
モバイルサポートやAMDはDojo 1.6からサポートが始まり、1.7で本格的な対応がされています。このシリーズでは1.6の更新内容について触れていませんでしたので、多少旧聞になってしまいますが、今回の記事はDojo 1.6の更新内容をざっとおさらいしておきたいと思います。
Dojo 1.6.0は2011年2月にリリースされました。その直後の3月に、Firefox 4.0とFirefox 4.0とInternet Explorer 9が立て続けにリリースされ、これらをサポートしたDojo 1.6.1が5月にリリースされています。
非同期モジュール定義(AMD)
非同期モジュール定義(Asynchronous Module Definition、以降AMD)はその名の通り、非同期にロード可能なモジュールを定義する仕組みのことで、CommonJSで標準として提案されています。Dojoがこの標準に準拠することにより、他のAMD準拠のライブラリとの間の相互利用が可能となります。
Dojoでは、以前よりdojo.provide()によるモジュール定義、およびdojo.require()による動的なモジュールのロードを実現していました。このdojo.require()によるモジュールのロードは同期です。すなわち、1)モジュールを含んだJavascriptファイルがネットワーク越しにロードされ、2)読み込まれ、3)評価される、という一連の処理が同期で行われるため、この間処理はブロックされます。これは、モジュールのサイズが大きくなればなるほど、パフォーマンスに与える影響が大きくなることを意味します。
AMDではdefine()関数でモジュールを定義し、require()関数でモジュールをロードすることになります。この変更がDojo 1.6で導入されはじめ、Dojo 1.7でフルサポートとなります。今後dojo.provide()およびdojo.require()の代わりにこれらの新しい関数を使うことが推奨されており、Dojo 1.7では古い関数はdeprecatedとなるので、今後Dojo 1.6/1.7以降で新しいモジュールを開発する場合は、AMD方式の採用を検討したほうが良いでしょう。ただし、少なくともDojo 1.7ではまだ互換性維持のため、古い関数が使えます。
AMDの詳細に関しては次回以降の記事でお届けする予定です。
実は、Dojoは以前よりXDローダーと呼ばれる、クロスドメインをサポートするためのローダーを提供しており、これを使うと副次的に非同期ロードの恩恵を受けることができます(『Dojo道場 ~ 第4回「ビルドでパフォーマンス・チューニング(3)」XDローダー』参照)。Dojo 1.6でのAMDサポートはこれとは別の方法で、より標準的なアプローチをとっています。
モバイル(dojox.mobile)
dojox.mobileはDojoベースのモバイルWebアプリケーションを実現するためのウィジェット群です。iOS(iPhone/iPad)、Android、Blackberry上のWebブラウザ(例えばiOS上のSafari)で動作するのですが、それぞれのOSのネイティブのユーザー・インターフェースとそっくりな見た目、エフェクト、操作性を持つアプリケーションを、非常に簡単に実装できます。
ネイティブのアプリケーションの場合、複数のOSをサポートするには、同じ仕様をそれぞれのプラットホーム上で実装しなければなりませんが、dojox.mobileを使ったWebアプリケーションの場合、1つのアプリケーションを実装すればそれぞれのプラットホームで動かすことができます。見た目はスタイルシートで切り替えるだけです。
dojox.mobileはDojo 1.5で実験的に実装が始まり、Dojo 1.6で基本的な部品をそろえ、Dojo 1.7でさらに大きく進化しました。ここ最近のスマート・フォンやタブレットの普及に伴い、現在Dojoとしても最も力を入れている分野の1つで、開発者の注目度も高まっています。こちらも、詳細に関しては次回以降の記事でお届けします。