观摩了各位神级人物的文章,个人总结下AMD 以及CMD的区别
AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"
AMD 推崇的是依赖前置,在解析和执行模块之前,开发者必须指明所有要依赖的模块,因此也无需遍历所有的依赖模块,从而提高性能,but 对于开发者的工作任务量就加大了,写到100行后,发现需要依赖一个模块,在去增加.
有两个Javascript库实现了AMD规范:require.js和curl.js。
RequireJS就是实现了AMD规范的呢。
代码结构
define(['a','b'],function(a,b){
a.doSomething();
b.doSomething();
})
CMD推崇的是依赖就近原则,可以把依赖写在任何一行代码处
代码结构
define(function(require,export,module){
var a = require('a');
a.doSomething();
var b = require('b')
b.doSomething();
})
代码运行时,需要遍历所有的require,找到后面的依赖,做法是通过function toString(),正则匹配require关键字,找到后面的依赖,显然是牺牲性能来换取开发便利的方法.
上面讲的是硬依赖(肯定需要的),
if(status){
a.doSomething()
}
对于上面的可能用到a模块,也可能用不到a,这种称为软依赖.用硬依赖的方式去加载a模块是可行的,但是有些浪费资源了.
对于软依赖,可以通过 依赖前置+异步回调函数的形式 ,简述上面的代码
函数体
if( status){
async(['a'],function(a){
a.doSomething()
})
}
CommonJS API定义很多普通应用程序(主要指非浏览器的应用)使用的API,从而填补了这个空白。它的终极目标是提供一个类似Python,Ruby和Java标准库。这样的话,开发者可以使用CommonJS API编写应用程序,然后这些应用可以运行在不同的JavaScript解释器和不同的主机环境中
CommonJS是一种规范,NodeJS是这种规范的实现