Dojo 新しいロード、ビルドシステムAPI(AMD API)。dojo.require とか廃止予定(deprecated) なのね。。。
最近 Dojo を弄くり始めた。ネットの情報を見ながら、レイアウト使ってみたり、ボタンつくってみたり、してたのだが、developerWorks の記事を見ながら、リファレンスを見ていたら、気になる記述を見つけた。
The Dojo Loader Legacy Modes
v1.7.0 現在、Dojo ローダーは、AMD API で実装されていて、今後こちらのAPIが使われていく。しかしながら、dojo.require, dojo.provide などの、レガシーローダーAPI も、version 2.0 までは、完全にサポートされる。
あららら。
ようやく、Amazon に頼んでた本(中古、海外取り寄せで、2週間ぐらいかかった) が、届いたところなのに。結局、ネットの最新情報でなければ役に立たない状況になりそうだ。
なんだかんだ言って、本にまとまってると、体系的に知識を仕入れるには便利なんだけどなー
いずれにしても、Dojo 概観したところ、モジュールシステムの周りとか、エレガントなんだけれど、パフォーマンス的にどうなんかいなという感じを抱く仕組みではあったので、新しい仕組みに期待できそうな気はする。
で、概要を押さえるために、新しいロードシステム の説明を読んでみた。
- 新しいロードAPIは、The Asynchronous Module Definition (AMD API)
- どうもDojoのプロダクトではなく、2011年に盛り上がった、クライアントサイドのJavaScript モジュール構築ライブラリで、デファクトスタンダードらしい(最近、JavaScript にも、クライアントサイド とか枕詞が必要ですな)
- Dojo では、AMD API を利用するために、「ほとんど」のライブラリを書き換え、v1.7.0 で完全対応
- 今までのモジュールシステム(dojo.require,dojo.provideなど)は、v1.x の間は完全にサポートするが、v2.0からは廃止される予定
みたいなことらしい。
以下、英検4級の自分の意訳。まちがってたらごめんなさい。
The Dojo Loader
プログラムはどんどん複雑でサイズも大きくなっていく傾向があるので、巨大なプログラムを実装する時に成功させるための頼みの綱は、いくつかの小さなプログラムに分解すること。
Dojo がモジュールシステムを備えた最初のライブラリだったのは、当初から、Dojo Toolkit は、巨大なプログラムを作り上げるために設計されていたため。
モジュールシステムのアイディアは、かなり素直な方法
- 定義されたモジュールを使うためのAPIを定義
- モジュールを実行時に組み立てるAPIを実装したローダーを構築
これらの2つのブロックを適切に使うことで、巨大なJavaScriptプログラムは、多くの小さなモジュールに分割することができ、結果的に、プログラムの構造をかなり簡潔にした。実際、Dojo Toolkit 自体は、多くの小さいJavaScriptから成り立っている。
HTTPによりダウンロードされるような個々のリソースは、帯域とレイテンシ制約により、ロードのパフォーマンスが遅くなってしまう。幸いにも、この問題の解決は簡単だ。一旦プログラムが構成されてしまえば、モジュールはプログラムによって、分析され、たった2、3 の論理的なモジュールを含んだリソースにまとめられ、実際にはダウンロードされる
通常、このステップは、開発環境から、運用環境へ移動するときに行う。
Dojo はモジュールAPIを定義し、ローダーとビルドアプリケーションをこれらの問題の解決のために公開した最初のJavaScriptライブラリだ。オリジナルAPIは、dojo.require 関数(モジュールを要求する)、dojo.provide(モジュールを定義) およびその他のサポート関数に含まれる。このAPIは現在では、「レガシーAPI」と呼ばれる。
2010年はじめから、改善したJavaScript モジュールシステムを新しくしようという関心が出てきました。
ひとつのAPI 、the Asynchronuous Module Definition (AMD) API (“AMD API”) が浮かび上がってきた。
この API は、2011年に劇的に取り上げられ、クライアントサイドでJavaScriptモジュールを構築するデファクトスタンダードになりました。
後方互換性を、1.x プロダクトラインについては維持しつつ、Dojo では、このデファクトスタンダードを、v1.7.0 で完全にサポートしています。(Dojoでは、レガシーAPIをversion2.0でサポートしなくなる予定です)
version 1.7.0 にて、Dojo ローダーおよびビルドシステムは、完全にAMD API およびレガシーAPIと後方互換性をとるように書き直されています。いくつか、新しくサポートされるAPIも構成されました。
has.js、dojo configuration、dojo loader micro-events、error reporting、tracing APIなどが、AMD プラグインに含まれます。
最後に、dojo および dijit ツリー、dojoxツリーのほとんどは、AMD API を利用できるようにコンバートされています。
チュートリアルおよびマニュアル