1. 程式人生 > >CommonJS、AMD和CMD區別

CommonJS、AMD和CMD區別

環境 add 編程 style script webp git 加載模塊 AS

本文參考自:https://www.cnblogs.com/chenguangliang/p/5856701.html

1、CommonJS

NodeJS是CommonJS規範的實現,webpack 也是以CommonJS的形式來書寫。node.js將javascript語言用於服務器端編程。

2、AMD

基於commonJS規範的nodeJS出來以後,服務端的模塊概念已經形成,很自然地,大家就想要客戶端模塊。而且最好兩者能夠兼容,一個模塊不用修改,在服務器和瀏覽器都可以運行。但是,由於一個重大的局限,使得CommonJS規範不適用於瀏覽器環境

var math = require(‘math‘);

  math.add(
2, 3);

第二行math.add(2, 3),在第一行require(‘math‘)之後運行,因此必須等math.js加載完成。也就是說,如果加載時間很長,整個應用就會停在那裏等。您會註意到 require 是同步的。

這對服務器端不是一個問題,因為所有的模塊都存放在本地硬盤,可以同步加載完成,等待時間就是硬盤的讀取時間。但是,對於瀏覽器,這卻是一個大問題,因為模塊都放在服務器端,等待時間取決於網速的快慢,可能要等很長時間,瀏覽器處於"假死"狀態。

因此,瀏覽器端的模塊,不能采用"同步加載"(synchronous),只能采用"異步加載"(asynchronous)。這就是AMD規範誕生的背景。

AMD是"Asynchronous Module Definition"的縮寫,意思就是"異步模塊定義"。它采用異步方式加載模塊,模塊的加載不影響它後面語句的運行。所有依賴這個模塊的語句,都定義在一個回調函數中,等到加載完成之後,這個回調函數才會運行。

3、CMD

CMD 推崇依賴就近,AMD 推崇依賴前置。

技術分享圖片

CommonJS、AMD和CMD區別