javascript
requireJS和seajs区别?
都是用來(lái)處理js模塊加載,采用的定義規(guī)范不同,requireJS采用的是AMD,seajs采用的是CMD.
AMD,CMD,CommonJS是目前最常用的三種模塊化書(shū)寫(xiě)規(guī)范。
CommonJS
CommonJS規(guī)范是誕生比較早的。NodeJS就采用了CommonJS。是這樣加載模塊:
var clock = require('clock'); clock.start();這種寫(xiě)法適合服務(wù)端,因?yàn)樵诜?wù)器讀取模塊都是在本地磁盤(pán),加載速度很快。但是如果在客戶端,加載模塊的時(shí)候有可能出現(xiàn)“假死”狀況。比如上面的例子中clock的調(diào)用必須等待clock.js請(qǐng)求成功,加載完畢。那么,能不能異步加載模塊呢?
AMD
AMD,即 (Asynchronous Module Definition),這種規(guī)范是異步的加載模塊,requireJs應(yīng)用了這一規(guī)范。先定義所有依賴,然后在加載完成后的回調(diào)函數(shù)中執(zhí)行:
require([module], callback);用AMD寫(xiě)上一個(gè)模塊:
require(['clock'],function(clock){clock.start(); });AMD雖然實(shí)現(xiàn)了異步加載,但是開(kāi)始就把所有依賴寫(xiě)出來(lái)是不符合書(shū)寫(xiě)的邏輯順序的,能不能像commonJS那樣用的時(shí)候再require,而且還支持異步加載后再執(zhí)行呢?
CMD
CMD (Common Module Definition), 是seajs推崇的規(guī)范,CMD則是依賴就近,用的時(shí)候再require。它寫(xiě)起來(lái)是這樣的:
define(function(require, exports, module) {var clock = require('clock');clock.start(); });AMD和CMD最大的區(qū)別是對(duì)依賴模塊的執(zhí)行時(shí)機(jī)處理不同,而不是加載的時(shí)機(jī)或者方式不同,二者皆為異步加載模塊。
AMD依賴前置,js可以方便知道依賴模塊是誰(shuí),立即加載;而CMD就近依賴,需要使用把模塊變?yōu)樽址馕鲆槐椴胖酪蕾嚵四切┠K,這也是很多人詬病CMD的一點(diǎn),犧牲性能來(lái)帶來(lái)開(kāi)發(fā)的便利性,實(shí)際上解析模塊用的時(shí)間短到可以忽略。
以上就是三者的異同,如有疑問(wèn)或建議,請(qǐng)參考以下文章或聯(lián)系我,謝謝。
總結(jié)
以上是生活随笔為你收集整理的requireJS和seajs区别?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AngularJS快速上手
- 下一篇: js实现鼠标拖拽功能基本思路