最近在学习js的过程中看见两个新的东西,CMD和AMD,下面我们就来了解一下这两个东西是什么,有什么区别吧。
简单的介绍:
CMD (
Common Module Definition
) 简单的说:通用模块定义。
AMD(
Asynchronous Module Definition
) 简单的说:异步模块定义。
我的理解:
可以这么说,AMD 和 CMD是两种对模块化的不同规范,他们的不同主要体现在加载的js的处理机制不同,特别是对js中的依赖原则的不同。
AMD推崇依赖前置
,在定义模块的时候就要声明其依赖的模块。CMD推崇就近依赖 ,只有在用到某个模块的时候再去require。
AMD依赖前置,js可以方便知道依赖模块是谁,立即加载,而CMD就近依赖,需要使用把模块变为字符串解析一遍才知道依赖了那些模块。对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。
别人家的解释:
下面是玉伯对于 AMD 与 CMD 区别的解释:(玉波:前淘宝UED,现支付宝前端工程师)
AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。
代码的体现:
// CMD
define
(
function
(
require
,
exports
,
module
)
{
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性能好,因为只有用户需要的时候才执行。