JavaScript では、AMD はモジュール仕様である「非同期モジュール定義」を指します。モジュールを非同期にロードします。モジュールのロードは、後続のステートメントの実行には影響しません。このモジュールに依存するすべてのステートメントは影響を受けません。は、コールバック関数で定義されています。このコールバック関数は、読み込みが完了するまで実行されません。
このチュートリアルの動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。
Web サイトが徐々に「インターネット アプリケーション」になるにつれて、Web ページに埋め込まれた Javascript コードは大きくなり、より複雑になってきています。
Web ページはますますデスクトップ プログラムに似てきており、チームの分業とコラボレーション、進捗管理、単体テストなどが必要になります...開発者はソフトウェア エンジニアリング手法を使用して Web のビジネス ロジックを管理する必要がありますページ。
JavaScript モジュラー プログラミングが緊急のニーズになっています。理想的には、開発者はコア ビジネス ロジックを実装するだけで済み、他のモジュールは他の人がロードできるようになります。
ただし、JavaScript はモジュール型プログラミング言語ではないため、「モジュール」はおろか「クラス」もサポートしていません。 (策定中の ECMAScript 標準第 6 版では「クラス」と「モジュール」が正式にサポートされる予定ですが、実用化には長い時間がかかります。)
JavaScript コミュニティは、既存の環境を改善するために多大な努力を払ってきました。 実行環境では、「モジュール」の効果が実現されます。この記事では、「JavaScript モジュール型プログラミング」の現在のベスト プラクティスを要約し、それらを実践する方法について説明します。これは入門チュートリアルではありませんが、JavaScript の基本的な構文を少し理解していれば理解できます。
モジュールの仕様
まず考えてみましょう。なぜモジュールが重要なのでしょうか。
モジュールのおかげで、他の人のコードをより便利に使用でき、必要な機能に必要なモジュールをロードできます。
ただし、これには前提条件があります。つまり、全員が同じ方法でモジュールを作成する必要があります。そうでない場合、あなたにはあなたの書き方があり、私には私の書き方があります。混乱! Javascript モジュールの公式仕様がまだ存在しないことを考慮すると、これはさらに重要です。
現在、一般的な Javascript モジュール仕様には CommonJS と AMD の 2 つがあります。
CommonJS
2009 年、アメリカのプログラマー Ryan Dahl は、サーバーサイド プログラミングに JavaScript 言語を使用するために、node.js プロジェクトを作成しました。
これにより、「JavaScript モジュール型プログラミング」が正式に誕生しました。正直に言うと、ブラウザ環境では、モジュールがなくても大きな問題にはなりません。結局のところ、Web プログラムの複雑さには制限があります。しかし、サーバー側には、オペレーティング システムや他のアプリケーションと対話するためのモジュールが必要です。それ以外の場合は方法がありません。
node.js のモジュール体系は CommonJS 仕様を参照して実装されています。 CommonJS には、モジュールをロードするためのグローバル メソッド require() があります。数学モジュール math.js があると仮定すると、次のようにロードできます。
var math = require('math');
その後、モジュールによって提供されるメソッドを呼び出すことができます:
var math = require('math'); math.add(2,3); // 5
このシリーズは主にブラウザ プログラミングを目的としており、node.js は含まれないため、これ以上 CommonJS については説明しません。 。ここで知っておく必要があるのは、モジュールをロードするために require() が使用されるということだけです。
ブラウザ環境
サーバー側モジュールを手に入れたら、誰もがクライアント側モジュールを欲しがるのは当然です。そして、この 2 つに互換性があり、モジュールを変更せずにサーバーとブラウザの両方で実行できることが最善です。
ただし、大きな制限があるため、CommonJS 仕様はブラウザ環境には適していません。前のセクションのコードをブラウザで実行すると、大きな問題が発生します。わかりますか?
var math = require('math'); math.add(2, 3);
math.add(2, 3) の 2 行目は、require('math') の 1 行目の後に実行されるため、math.js が読み込まれるまで待つ必要があります。つまり、読み込みに時間がかかると、アプリ全体がハングアップして待機することになります。
すべてのモジュールはローカル ハードディスクに保存されており、同期してロードできるため、サーバー側では問題ありません。待機時間はハードディスクの読み取り時間です。ただし、ブラウザの場合、モジュールはサーバー側に配置され、待ち時間はネットワークの速度に依存するため、これは大きな問題であり、時間がかかる場合があり、ブラウザは「サスペンド」状態になります。 。
したがって、ブラウザ側モジュールでは「同期読み込み」(同期)は利用できず、「非同期読み込み」(非同期)のみが利用可能となります。これがAMD仕様誕生の背景です。
AMD仕様
AMDとは「Asynchronous Module Definition」の略で、「非同期モジュール定義」を意味します。モジュールは非同期でロードされ、モジュールのロードは後続のステートメントの実行には影響しません。このモジュールに依存するすべてのステートメントはコールバック関数で定義されており、このコールバック関数はロードが完了するまで実行されません。
AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:
require([module], callback);
第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数。如果将前面的代码改写成AMD形式,就是下面这样:
require(['math'], function (math) { math.add(2, 3); });
math.add()与math模块加载不是同步的,浏览器不会发生假死。所以很显然,AMD比较适合浏览器环境。
目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js。本系列的第三部分,将通过介绍require.js,进一步讲解AMD的用法,以及如何将模块化编程投入实战。
更多编程相关知识,请访问:编程视频!!
以上がJavaScript admとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。