浅析AMD & CMD 加载模式的区别

发布者: xiaozhimn

写过很多模块加载器了,我相信还是有很多新手无法正确的分清楚 AMD和CMD的区别,今天就简单从模块加载的角度为大家简单介绍下这两者的区别。

CMD推崇依赖就近,可以把依赖写进你的代码中的任意一行,例:

define(function(require, exports, module) {
  var a = require('./a')
  var b = require('./b')
})
解释: 代码在运行时,首先是不知道依赖的,需要遍历所有的require关键字,找出后面的依赖。具体做法是将function toString后,用正则匹配出require关键字后面的依赖。显然,这是一种牺牲性能来换取更多开发便利的方法。

而AMD是依赖前置的,换句话说,在解析和执行当前模块之前,首先要声明所依赖的模块

define(['./a','./b'],function(a,b){

}) 
解释:代码在一旦运行到此处,能立即知晓依赖。而无需遍历整个函数体找到它的依赖,因此性能有所提升,缺点就是开发者必须显式得指明依赖——这会使得开发工作量变大,比如:当你写到函数体内部几百上千行的时候,忽然发现需要增加一个依赖,你不得不回到函数顶端来将这个依赖添加进数组。

通过以上的简单介绍,大家应该对此有一定的了解, 在后面的文章中,可以分别设计两套不同的加载器demo供大家学习。

0赞