在javascript中,AMD指的是“非同步模組定義”,是一種模組規範,它採用非同步方式載入模組,模組的載入不影響它後面語句的運作;所有依賴這個模組的語句,都定義在一個回呼函數中,等到載入完成之後,這個回呼函數才會運作。
本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
隨著網站逐漸變成"網路應用程式",嵌入網頁的Javascript程式碼越來越龐大,越來越複雜。
網頁越來越像桌面程序,需要一個團隊分工協作、進度管理、單元測試等等......開發者不得不使用軟體工程的方法,管理網頁的業務邏輯。
Javascript模組化編程,已經成為一個迫切的需求。理想情況下,開發者只需要實作核心的業務邏輯,其他都可以載入別人已經寫好的模組。
但是,Javascript不是一種模組化程式語言,它不支援"類別"(class),更遑論"模組"(module)了。 (正在製定中的ECMAScript標準第六版,將正式支援"類"和"模組",但還需要很長時間才能投入實用。)
Javascript社群做了很多努力,在現有的運作環境中,實現"模組"的效果。本文總結了目前"Javascript模組化程式設計"的最佳實踐,說明如何投入實用。雖然這不是初級教程,但只要稍稍了解Javascript的基本語法,就能看懂。
模組的規格
先想一想,為什麼模組很重要?
因為有了模組,我們就可以更方便使用別人的程式碼,想要什麼功能,就載入什麼模組。
但是,這樣做有一個前提,就是大家必須以同樣的方式寫模組,否則你有你的寫法,我有我的寫法,豈不是亂了套!考慮到Javascript模組現在還沒有官方規範,這一點就更重要了。
目前,通行的Javascript模組規格共有兩種:CommonJS和AMD。
CommonJS
2009年,美國程式設計師Ryan Dahl創造了node.js項目,將javascript語言用於伺服器端程式設計。
這標誌"Javascript模組化程式設計"正式誕生。因為老實說,在瀏覽器環境下,沒有模組也不是特別大的問題,畢竟網頁程式的複雜性有限;但是在伺服器端,一定要有模組,與作業系統和其他應用程式互動,否則根本沒法程式設計.
node.js的模組系統,就是參考CommonJS規格實現的。在CommonJS中,有一個全域性方法require(),用於載入模組。假定有一個數學模組math.js,就可以像下面這樣載入。
var math = require('math');
然後,就可以呼叫模組提供的方法:
var math = require('math'); math.add(2,3); // 5
因為這個系列主要針對瀏覽器編程,不涉及node.js,所以對CommonJS就不多做介紹了。我們在這裡只要知道,require()用來載入模組就行了。
瀏覽器環境
有了伺服器端模組以後,很自然地,大家就想要客戶端模組。而且最好兩者能夠相容,一個模組不用修改,在伺服器和瀏覽器都可以運作。
但是,由於一個重大的限制,使得CommonJS規格不適用於瀏覽器環境。還是上一節的程式碼,如果在瀏覽器中運行,會有一個很大的問題,你能看出來嗎?
var math = require('math'); math.add(2, 3);
第二行math.add(2, 3),在第一行require('math')之後運行,因此必須等math.js載入完成。也就是說,如果載入時間很長,整個應用程式就會停在那裡等。
這對伺服器端不是一個問題,因為所有的模組都存放在本地硬碟,可以同步載入完成,等待時間就是硬碟的讀取時間。但是,對於瀏覽器,這卻是一個大問題,因為模組都放在伺服器端,等待時間取決於網速的快慢,可能要等很長時間,瀏覽器處於"假死"狀態。
因此,瀏覽器端的模組,不能採用"同步載入"(synchronous),只能採用"非同步載入"(asynchronous)。這就是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中文網其他相關文章!