㈠ 什麼是amd/cmd 前端規范
AMD 是 Requirejs 在推廣過程中對模塊定義的規范化產出。
CMD 是 SeaJS 在推廣過程中對模塊定義的規范化產出。
類似的還有 CommonJS Moles/2.0 規范,是 BravoJS 在推廣過程中對模塊定義的規范化產出。
還有不少⋯⋯
這些規范的目的都是為了 JavaScript 的模塊化開發,特別是在瀏覽器端的。
目前這些規范的實現都能達成瀏覽器端模塊化開發的目的。
區別:
1. 對於依賴的模塊,AMD 是提前執行,CMD 是延遲執行。不過 RequireJS 從 2.0 開始,也改成可以延遲執行(根據寫法不同,處理方式不同)。CMD 推崇 as lazy as possible.
2. CMD 推崇依賴就近,AMD 推崇依賴前置。看代碼:
// CMD
define(function(require, exports, mole) {
var a = require('./a')
a.doSomething()
// 此處略去 100 行
var b = require('./b') // 依賴可以就近書寫
b.doSomething()
// ...
})
// AMD 默認推薦的是
define(['./a', './b'], function(a, b) { // 依賴必須一開始就寫好
a.doSomething()
// 此處略去 100 行
b.doSomething()
...
})
雖然 AMD 也支持 CMD 的寫法,同時還支持將 require 作為依賴項傳遞,但 RequireJS 的作者默認是最喜歡上面的寫法,也是官方文檔里默認的模塊定義寫法。
3. AMD 的 API 默認是一個當多個用,CMD 的 API 嚴格區分,推崇職責單一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,沒有全局 require,而是根據模塊系統的完備性,提供 seajs.use 來實現模塊系統的載入啟動。CMD 里,每個 API 都簡單純粹。
㈡ react.js和seajs有什麼區別
react.js和seajs的區別:
SeaJS只會在真正需要使用(依賴)模塊時才執行該模塊;
SeaJS是非同步載入模塊的沒錯, 但執行模塊的順序也是嚴格按照模塊在代碼中出現(require)的順序。
而RequireJS會先盡早地執行(依賴)模塊, 相當於所有的require都被提前了, 而且模塊執行的順序也不一定100%就是先mod1再mod2。
㈢ labjs,requirejs,sea.js 哪個最好用為什麼
LABjs 的核心是 LAB(Loading and Blocking):Loading 指非同步並行載入,Blocking 是指同步等待執行。LABjs 通過優雅的語法(script 和 wait)實現了這兩大特性,核心價值是性能優化。LABjs 是一個文件載入器。
RequireJS 和 SeaJS 則是模塊載入器,倡導的是一種模塊化開發理念,核心價值是讓 JavaScript 的模塊化開發變得更簡單自然。
模塊載入器一般可降級為文件載入器用,因此使用 RequireJS 和 SeaJS,也可以達成 LABjs 的性能優化目的。
RequireJS 和 SeaJS 都是很不錯的模塊載入器,兩者區別如下:
1. 兩者定位有差異。RequireJS 想成為瀏覽器端的模塊載入器,同時也想成為 Rhino / Node 等環境的模塊載入器。SeaJS 則專注於 Web 瀏覽器端,同時通過 Node 擴展的方式可以很方便跑在 Node 伺服器端
2. 兩者遵循的標准有差異。RequireJS 遵循的是 AMD(非同步模塊定義)規范,SeaJS 遵循的是 CMD (通用模塊定義)規范。規范的不同,導致了兩者 API 的不同。SeaJS 更簡潔優雅,更貼近 CommonJS Moles/1.1 和 Node Moles 規范。
3. 兩者社區理念有差異。RequireJS 在嘗試讓第三方類庫修改自身來支持 RequireJS,目前只有少數社區採納。SeaJS 不強推,而採用自主封裝的方式來「海納百川」,目前已有較成熟的封裝策略。
4. 兩者代碼質量有差異。RequireJS 是沒有明顯的 bug,SeaJS 是明顯沒有 bug。
5. 兩者對調試等的支持有差異。SeaJS 通過插件,可以實現 Fiddler 中自動映射的功能,還可以實現自動 combo 等功能,非常方便便捷。RequireJS 無這方面的支持。
6. 兩者的插件機制有差異。RequireJS 採取的是在源碼中預留介面的形式,源碼中留有為插件而寫的代碼。SeaJS 採取的插件機制則與 Node 的方式一致:開放自身,讓插件開發者可直接訪問或修改,從而非常靈活,可以實現各種類型的插件。
還有不少細節差異就不多說了。
總之,SeaJS 從 API 到實現,都比 RequireJS 更簡潔優雅。如果說 RequireJS 是 Prototype 類庫的話,則 SeaJS 是 jQuery 類庫。
最後,向 RequireJS 致敬!RequireJS 和 SeaJS 是好兄弟,一起努力推廣模塊化開發思想,這才是最重要的。
㈣ Seajs優缺點 什麼是CMD 和AMD 如何使用
1.簡介
Seajs,一個Web模塊載入框架,追求簡單、自然的代碼書寫和組織方式,:Sea.js 遵循 CMD 規范,模塊化JS代碼。依賴的自動載入、配置的簡潔清晰,可以讓程序員更多地專注編碼。
2.優缺點
優點:
1).提高可維護性。
2).模塊化編程。
3).動態載入,前端性能優化
缺點:
1).學習文檔偏少且混亂,會更改團隊使用JS的編寫習慣,必須使用模塊化編程。
2).不太適合團隊目前的情況,多JS文件但少改動,動態載入優勢和模塊化優勢不明顯。
3). 需要配套使用SPM工具,JS的打包和管理工具。
2.什麼是CMD 和AMD ?
非同步模塊定義(AMD)是Asynchronous Mole Definition的縮寫,是 RequireJS 在推廣過程中對模塊定義的規范化產出。
通用模塊定義(CMD)是Common Mole Definition的縮寫,是SeaJS 在推廣過程中對模塊定義的規范化產出。
RequireJS 和 SeaJS 都是模塊化框架的代表,AMD和CMD,是他們各自定義模塊化的方式,大同小異,主要是代碼風格和API不同。
3.如何使用?
代碼如下:<script src="../js/examples-master/sea-moles/seajs/seajs/2.1.1/sea.js"></script>
<script>
//配置js路徑
seajs.config({
alias:{
"jquery":"../examples-master/sea-moles/jquery/jquery/1.10.1/jquery.js"
}
});
//載入模塊
seajs.use('../js/seajs/init',function($){
$("#test_div").click(function(){alert(1);});
});
</script>
代碼如下:
//init.js
define(function(require,exports,mole){
var $ = require('jquery');
return $;
});
㈤ amd和cmd規范的區別
AMD 是 RequireJS 在推廣過程中對模塊定義的規范化產出。
CMD 是 SeaJS 在推廣過程中對模塊定義的規范化產出。
類似的還有 CommonJS Moles/2.0 規范,是 BravoJS 在推廣過程中對模塊定義的規范化產出。
還有不少⋯⋯
這些規范的目的都是為了 JavaScript 的模塊化開發,特別是在瀏覽器端的。
目前這些規范的實現都能達成瀏覽器端模塊化開發的目的。
區別:
1. 對於依賴的模塊,AMD 是提前執行,CMD 是延遲執行。不過 RequireJS 從 2.0 開始,也改成可以延遲執行(根據寫法不同,處理方式不同)。CMD 推崇 as lazy as possible.
2. CMD 推崇依賴就近,AMD 推崇依賴前置。看代碼:
// CMD
define(function(require, exports, mole) {
var a = require('./a')
a.doSomething()
// 此處略去 100 行
var b = require('./b') // 依賴可以就近書寫
b.doSomething()
// ...
})
// AMD 默認推薦的是
define(['./a', './b'], function(a, b) { // 依賴必須一開始就寫好
a.doSomething()
// 此處略去 100 行
b.doSomething()
...
})
雖然 AMD 也支持 CMD 的寫法,同時還支持將 require 作為依賴項傳遞,但 RequireJS 的作者默認是最喜歡上面的寫法,也是官方文檔里默認的模塊定義寫法。
3. AMD 的 API 默認是一個當多個用,CMD 的 API 嚴格區分,推崇職責單一。比如 AMD 里,require 分全局 require 和局部 require,都叫 require。CMD 里,沒有全局 require,而是根據模塊系統的完備性,提供 seajs.use 來實現模塊系統的載入啟動。CMD 里,每個 API 都簡單純粹。
㈥ seajs和requiejs的區別,和用gulp打包方法
1、執爛返行順序不同
從demo.html 引入一個入口c.js, c.js require-b.js , b.js require - a.js
代碼如下:
c mole
[html] view plain print?
define(function(require, exports, mole) {
console.log("hello mole c");
require('b');
console.log("c finished");
});
b mole
[html] view plain print?
define(function(require, exports, mole) {
console.log("hello mole b")
var a = require('a');
console.log("b finished")
});
a mole
[html] view plain print?
define(function() {
console.log("hello mole a")
});
requriejs 的 html代碼:
[html] view plain print?
<!doctype html>
<html lang="仔晌en">
<head>
<meta charset="UTF-8">
<title>seajs和requirejs的區別</title>
<script src="require.min.js" data-main="c.js"></script>
</head>
<body>
</body>
</html>
執行結果:
ello mole aa.js:2
hello mole bb.js:2
b finishedb.js:4
hello mole cc.js:3
c finishedc.js:7
==============================================
seajs的html代碼:
[html] view plain print?
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>seajs和requirejs的區別</title>
<script src="sea.2.3.js"></script>
<script>
seajs.use('./c'飢戚飢);
</script>
</head>
<body>
</body>
</html>
執行結果:
hello mole cc.js:3
hello mole bb.js:2
hello mole aa.js:2
b finishedb.js:4
c finishedc.js:7
所以總結:
seajs是從上到下執行,
requriejs是把其中require的js全部載入完了,再往下執行。·
2、依賴的載入有所不同
在define中 requriejs載入了依賴就執行;而seajs在define中只是載入不會執行(如果要執行,需要用require()方法)
案例代碼:
c.js模塊
[html] view plain print?
define(['b'],function(require,exports,mole){
console.log("hello mole c");
console.log("c finished");
});
b.js模塊
[html] view plain print?
define(['a'],function(require,exports,mole) {
console.log("hello mole b")
console.log("b finished")
});
a.js模塊
[html] view plain print?
define(['b'],function(require,exports,mole) {
console.log("hello mole a")
});
seajs和requirejs的 html代碼 和 1 中一樣
執行結果:
seajs執行結果:
hello mole cc.js:2
c finishedc.js:4
requiresj的執行結果:
ello mole aa.js:2
hello mole bb.js:2
b finishedb.js:4
hello mole cc.js:2
c finishedc.js:4
總結: 在define書寫中A:requirejs 載入了就執行,所以requirejs是預執行(在define中預先執行所有require依賴的js),RequireJS的做法是並行載入所有依賴的模塊, 並完成解析後, 再開始執行其他代碼, 因此執行結果只會"停頓"1次, 完成整個過程是會比SeaJS要快. 預執行
B:seajs只是純粹的載入依賴的文件,不執行就連console都不執行就是純粹的「載入」,SeaJS一樣是並行載入所有依賴的模塊, 但不會立即執行模塊, 等到真正需要(require)的時候才開始解析,
這里耗費了時間, 因為這個特例中的模塊巨大, 因此造成"停頓"2次的現象, 這就是我所說的SeaJS中的"懶執行".
在2的基礎上 c.js代碼為
[html] view plain print?
define(function(require,exports,mole){
require('b');
require('a');
console.log("hello mole c");
console.log("c finished");
});
執行結果都是一樣
hello mole bb.js:2
b finishedb.js:4
hello mole aa.js:2
hello mole cc.js:4
c finishedc.js:6
3、取別名時requirejs默認舍掉.js的後綴
4、 打包方法
gulp 打包seajs
requirejs 打包
http://blog.csdn.net/kongjiea/article/details/48316049
㈦ requirejs和seajs的區別
兩者的區別如下:
定位有差異。RequireJS 想成為瀏覽器端的模塊載入器,同時也想成為 Rhino / Node 等環境的模塊載入器。SeaJS 則專注於 Web 瀏覽器端,同時通過 Node 擴展的方式可以很方便跑在 Node 伺服器端。
遵循的規范不同。RequireJS 遵循的是 AMD(非同步模塊定義)規范,SeaJS 遵循的是 CMD (通用模塊定義)規范。規范的不同,導致了兩者 API 的不同。SeaJS 更簡潔優雅,更貼近 CommonJS Moles/1.1 和 Node Moles 規范。
社區理念有差異。RequireJS 在嘗試讓第三方類庫修改自身來支持 RequireJS,目前只有少數社區採納。SeaJS 不強推,採用自主封裝的方式來「海納百川」,目前已有較成熟的封裝策略。
代碼質量有差異。RequireJS 是沒有明顯的 bug,SeaJS 是明顯沒有 bug。
對調試等的支持有差異。SeaJS 通過插件,可以實現 Fiddler 中自動映射的功能,還可以實現自動 combo 等功能,非常方便。RequireJS 無這方面的支持。
插件機制不同。RequireJS 採取的是在源碼中預留介面的形式,源碼中留有為插件而寫的代碼。SeaJS 採取的插件機制則與 JavaScript 語言以及Node 的方式一致:開放自身,讓插件開發者可直接訪問或修改,從而非常靈活,可以實現各種類型的插件。