1. 程式人生 > >AMD、CMD、commonJs

AMD、CMD、commonJs

說說你對AMD和Commonjs的理解

CommonJS是伺服器端模組的規範,Node.js採用了這個規範。

CommonJS規範載入模組是同步的,也就是說,只有載入完成,才能執行後面的操作。

由於Node.js主要用於伺服器程式設計,模組檔案一般都已經存在於本地硬碟,所以載入起來比較快,不用考慮非同步載入的方式,所以CommonJS規範比較適用。

瀏覽器不相容CommonJs的原因

瀏覽器不相容CommonJS的根本原因,在於缺少四個Node.js環境的變數。

module exports require global

AMD規範則是非同步載入模組,允許指定回撥函式。

AMD推薦的風格通過返回一個物件做為模組物件,CommonJS的風格通過對module.exports或exports的屬性賦值來達到暴露模組物件的目的。

AMD和CMD指的是瀏覽器端,CommonJS指的是服務端

對前端模組化的認識

但是,如果是瀏覽器環境, 要從伺服器端載入模組,這時就必須採用非同步模式,因此瀏覽器端一般採用AMD規範。

AMD 是 RequireJS 在推廣過程中對模組定義的規範化產出。
CMD 是 SeaJS 在推廣過程中對模組定義的規範化產出。
AMD 是提前執行,CMD 是延遲執行。

關於AMD

AMD 即Asynchronous Module Definition,中文名是非同步模組定義的意思。它是一個在瀏覽器端模組化開發的規範。

requireJS主要解決兩個問題

1、多個js檔案可能有依賴關係,被依賴的檔案需要早於依賴它的檔案載入到瀏覽器
2、js載入的時候瀏覽器會停止頁面渲染,載入檔案越多,頁面失去響應時間越長

AMD與CMD區別

最明顯的區別就是在模組定義時對依賴的處理不同

1、AMD推崇依賴前置,在定義模組的時候就要宣告其依賴的模組
2、CMD推崇就近依賴,只有在用到某個模組的時候再去require
這種區別各有優劣,只是語法上的差距,而且requireJS和SeaJS都支援對方的寫法

AMD和CMD最大的區別是對依賴模組的執行時機處理不同,注意不是載入的時機或者方式不同

很多人說requireJS是非同步載入模組,SeaJS是同步載入模組,這麼理解實際上是不準確的,其實載入模組都是非同步的,只不過AMD依賴前置,js可以方便知道依賴模組是誰,立即載入,而CMD就近依賴,需要使用把模組變為字串解析一遍才知道依賴了那些模組,這也是很多人詬病CMD的一點,犧牲效能來帶來開發的便利性,實際上解析模組用的時間短到可以忽略

為什麼我們說兩個的區別是依賴模組執行時機不同,為什麼很多人認為ADM是非同步的,CMD是同步的(除了名字的原因。。。)

同樣都是非同步載入模組,AMD在載入模組完成後就會執行改模組,所有模組都載入執行完後會進入require的回撥函式,執行主邏輯,這樣的效果就是依賴模組的執行順序和書寫順序不一定一致,看網路速度,哪個先下載下來,哪個先執行,但是主邏輯一定在所有依賴載入完成後才執行

CMD載入完某個依賴模組後並不執行,只是下載而已,在所有依賴模組載入完成後進入主邏輯,遇到require語句的時候才執行對應的模組,這樣模組的執行順序和書寫順序是完全一致的

這也是很多人說AMD使用者體驗好,因為沒有延遲,依賴模組提前執行了,CMD效能好,因為只有使用者需要的時候才執行的原因

require.js

require.js的誕生,就是為了解決這兩個問題:
 (1)實現js檔案的非同步載入,避免網頁失去響應;
 (2)管理模組之間的依賴性,便於程式碼的編寫和維護。

相關推薦

CommonJSAMDCMDNodeJsRequireJS到底有什麽聯系?

模塊化 包管理 conf 解決辦法 寫上 開發者 ase 例子 頁面 一、CommonJS 1.一開始大家都認為JS不強大,沒什麽用,官方定義的API只能構建基於瀏覽器的應用程序,CommonJS就按耐不住了,CommonJS API定義很多普通應用程序(主要指非瀏覽

再嘮叨JS模塊化加載之CommonJSAMDCMDES6

scrip 用例 fun 理想 str text 引用 寫到 加載完成 Javascript模塊化編程,已經成為一個迫切的需求。理想情況下,開發者只需要實現核心的業務邏輯,其他都可以加載別人已經寫好的模塊。 Javascript社區做了很多努力,在現有的運行環境中,實現”模

JavaScript模塊化 --- CommonjsAMDCMDES6 modules

con scroller exports 打包 www. pretty modules 前端 depends JavaScript模塊化 --- Commonjs、AMD、CMD、ES6 modules 2017.08.25 11:49 6666瀏覽 轉載:https

前端模組化(AMDCMDCommonJs)

知識點1:AMD/CMD/CommonJs是JS模組化開發的標準,目前對應的實現是RequireJs/SeaJs/nodeJs. 知識點2:CommonJs主要針對服務端,AMD/CMD主要針對瀏覽器端,所以最容易混淆的是AMD/CMD。(順便提一下,針對伺服器端和針對瀏覽器端有什麼本質的區別呢?伺服器端一

前端模塊化(AMDCMDCommonJs)

瀏覽器 預加載 執行順序 處理 大坑 不一定 同步 區別 seajs 知識點1:AMD/CMD/CommonJs是JS模塊化開發的標準,目前對應的實現是RequireJs/SeaJs/nodeJs. 知識點2:CommonJs主要針對服務端,AMD/CMD主要針對瀏覽器端,

認識AMDCMDUMDCommonJS

0、導言 JavaScript的生態系統一直在穩步增長,當各種元件混合使用時,就可能會發現不是所有的元件都能“和平共處”,為了解決這些問題,各種模組規範就出來了。 1、AMD(Asynchromous Module Definition - 非同步模組定義) AMD是R

CommonJSCMDAMDNodeJS創造JavaScript的未來

CMD是國內玉伯大神在開發SeaJS的時候提出來的,屬於CommonJS的一種規範,此外還有AMD,其對於的框架是RequireJS 1、二者都是非同步模組定義(Asynchronuous Mod

AMDCMDcommonJs

說說你對AMD和Commonjs的理解 CommonJS是伺服器端模組的規範,Node.js採用了這個規範。 CommonJS規範載入模組是同步的,也就是說,只有載入完成,才能執行後面的操作。 由於Node.js主要用於伺服器程式設計,模組檔案一般都

CommonJSAMDCMDNodeJsRequireJS到底有什麼聯絡?

一、CommonJS 1.一開始大家都認為JS不強大,沒什麼用,官方定義的API只能構建基於瀏覽器的應用程式,CommonJS就按耐不住了,CommonJS API定義很多普通應用程式(主要指非瀏覽器的應用)使用的API,從而填補了這個空白。它的終極目標是提供一個類似Python,Ruby和Java標準庫

AMDCMDCommonJS規範

 CommonJS規範  CommonJS是在瀏覽器環境之外構建JavaScript生態系統為目標產生的專案,比如伺服器和桌面環境中。CommonJS規範是為了解決JavaScript的作用域問題

前端commonjsAMDCMDES6等模組化的對比

CommmonJS用於node端,是同步載入的AMD依賴於requirejs,是非同步載入的,是提前載入,立即載入 CMD依賴於seajs,是非同步載入,延後載入,就近載入,用時載入 ES6是ES2015的簡稱,一般通過export來暴露模組,import來匯入模組Commo

模組化——AMDCMDCommonJs

模組化是指將一個複雜問題,依照一種分類的思維把問題進行系統性的分解處理。使得系統成為“高內聚,低耦合”的模組組成,讓管理,開發,維護變得“有理可循”。 RequireJS 、Sea.js

前端模組化——徹底搞懂AMDCMDESM和CommonJS

我們知道,在NodeJS之前,由於沒有過於複雜的開發場景,前端是不存在模組化的,後端才有模組化。NodeJS誕生之後,它使用CommonJS的模組化規範。從此,js模組化開始快速發展。 模組化的開發方式可以提供程式碼複用率,方便進行程式碼的管理。通常來說,一個檔案就是一個模組,有自己的作用域,只向外暴露特定的

AMDCMDUMD 模塊的寫法

define jquery lang 模塊 部分 並且 pup eof foo 最近幾年,我們可以選擇的Javascript組件的生態系統一直在穩步增長。雖然陡增的選擇範圍是極好的,但當組件混合匹配使用時就會出現很尷尬的局面。開發新手們會很快發現不是所有組件都能彼此“和平相

AMDCMDrequireimport的區別

AMD 推崇依賴前置 CMD 推崇就近依賴 什麼意思呢?就是AMD在定義模組的時候要先宣告其依賴的模組。例如這樣: define(['jquery'],function($){ var backButton = $('.backToTop'); return {

AMDCMDUMD

介紹 多年來,可供選擇的JavaScript元件的生態系統不斷地穩步增加。有很多的選擇固然是很好的一件事,但是各個元件混合搭配使用的時候會帶來不少的問題,開發者不會花很多時間就會發現所有元件使用起來總有這樣那樣的問題。 為了解決這些問題,互為競爭對手的模組規範 AMD 和 CommonJS

模組化規範之commenJSAMDCMDES6

commenJS(Node.js基於commenJS規範編寫) 理解 每個檔案都可以當作一個模組 在伺服器端(Node):模組的載入是在執行時同步載入的 在瀏覽器端(Browserify):模組需要提前編譯打包處理 基本語法 暴露模組(暴露出

js開發規範commons jscmdamdumd的理解

瞭解js模組規範是個啥? 在日常的程式碼開發中,起初感覺前端無疑就是寫些onclick事件 處理下與後端的資料互動,所以js寫的很混亂。當專案規模大 起來的時候,發現維護起來十分困難,應運而生的j

shellcmddos和腳本語言區別和聯系

同時 environ 正常 erl urn exe comm displays 進行 問題一:DOS與windows中cmd區別 在windows系統中,“開始-運行-cmd”可以打開“cmd.exe”,進行命令行操作。 操作系統可以分成核心(kernel)和Shell

了解JS模塊規範:AMDCMDCommonJS

requirejs 請求 sea pre 發展 區別 script 處理 環境 隨著JS模塊化編程的發展,處理模塊之間的依賴關系成為了維護的關鍵。 AMD,CMD,CommonJS是目前最常用的三種模塊化書寫規範。 CommonJS CommonJS規範是誕生比較