要件定義の不安をなくす。要件定義の不安をなくす。ユニファのバックエンド分割に学ぶイノベーションメタバース開発に必要な技術の基本知識をおさらい。Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。1.7の目玉機能として追加された非同期ロードを実現する「AMDローダー」機能について解説します。load)する機能が備わっており、これをうまく使うと、ページのダウンロードサイズを最小化することによってAJAXアプリケーションのパフォーマンスを最適化することができます。Definition(AMDと略されます)ローダーというものが新しく導入され、Dojoがモジュールを遅延ロードする方法、特に非同期にロードする方法が大幅に改善されました。APIと呼ばれる標準化された新しいモジュールの定義方法が採用されています。API/ローダーについて扱います。APIはモジュールを定義するAPIで、CommonJSというグループに標準とされるべく提唱されています。このAPIで定義されたモジュールはそれが依存するモジュールを含めて非同期にロードすることができます。これは同期ロードに対し、ブラウザのJavaScript環境にとって次の観点から特に有効です:同期ロードをすると、その間アプリケーション(ブラウザによってはブラウザ全体も)はユーザが何をしても応答できない(固まってしまう)が、非同期ロードではそれがない。同期ロードでは同時に1つのHTTPリクエストしか発行できない(上と似た理由によります)が、非同期ロードでは同時に複数のHTTPリクエストを発行できる。これによりコンテンツの量とHTTP接続の数のバランスを最適化することによってアプリケーションのパフォーマンスを向上することができる。同期ロードで一般的に使われるXMLHttpRequestではセキュリティ上の理由からメインのHTMLファイルが置かれているサーバーとしか通信できないという制約(クロスドメイン制約)があるが、非同期ロードで一般的に使われる動的に<script>タグを作成する方法ではその制約はない。これによりメインのHTMLファイルを自社サーバに置きながら社外サーバに置かれたJavaScriptモジュールを利用することができる。同期ロードで一般的に使われるXMLHttpRequestで読まれたモジュールはその後eval()という関数を使うことにより初めてJavaScriptとして評価される。eval()で評価されたJavaScriptコードは一般的にデバッグがしにくい。非同期ロードで一般的に使われる動的に<script>タグを作成する方法ではそういったデバッグのしにくさはない。1.7のほかに(抜粋すると)次のようなものがあります:RequireJScurlこれら2つはどちらもある程度のDojoとの互換性に関する検証がなされています。Dojoと似通ったカテゴリに入るAJAXライブラリのjQueryでも1.7においてAMDのサポートがされたそうです。APIのもう一つの大きなメリットで、AMDに準拠するどのモジュールも好きなAMDローダーを使ってロードすることができます。APIの文法AMDでは、define()という関数でモジュールを定義します。定義されるモジュールのID。モジュールのIDはdefine()関数内で定義しなくても後述のAMDローダーが自動的に決めてくれるので、省略されることが多い。連鎖依存するモジュールのID。モジュールを返す関数またはモジュール自体。関数がここで使われた場合、その引数は依存するモジュールとなる。モジュールのIDは一般的にモジュールのパスから.jsを取り除いたものとなります。dojo/_base/array.jsのモジュールIDはdojo/_base/arrayとなります。APIを使って簡単な価格引き合わせモジュールを書いてみます。商品名に対応する価格。日付に対応する割引率を返す関数。};});どちらの例でもモジュールIDを明示的に定義する必要も連鎖依存するモジュールもないため、define()関数の第一引数(id)、第二引数(dependencies)ともに省略されています。my/pricelist.jsの例では第三引数(factory)はりんごが350円、みかんが250円というオブジェクトで、これがモジュールとして定義されます。my/discount.jsの例ではfactoryは定義されるモジュールを返す関数で、その関数の返り値、つまり日付に対して割引率を返す関数がモジュールとして定義されます。};});この例では、define()関数の第二引数(dependencies)に”my/pricelist”と”my/discount”が指定され、my/priceモジュールがmy/pricelistとモジュールとmy/discountモジュールに依存することが示されています。第三引数(factory)はmy/pricelistモジュールとmy/discountモジュールを引数とする関数となり、その返り値、つまり製品の当日価格を返す関数がmy/priceモジュールとして定義されます。3.12」の最初のベータ版がリリース新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。