JavaScript中的AMD和CMD规范

267 阅读1分钟

AMD和CMD规范

AMD 和 CMD 规范的区别?

普通区别:

  • CMD 推崇依赖就近,AMD 推崇依赖前置
  • CMD 是延迟执行,AMD 是提前执行
  • CMD 性能好,因为只有用于需要的时候才执行
  • AMD 用户体验好,因为没有延迟,依赖模块提前就执行了

最大区别:

  • 对依赖模块的执行时机处理不同,而不是加载的时机或者方式不同,二者都是异步加载模块。
  • AMD 是依赖前置,js 可以方便知道依赖模块是什么,立即加载
  • CMD 就近依赖,需要使用把模块变为字符串解析一遍才知道依赖的那些模块

AMD

  • AMD 的意思是异步模块定义。它采用异步的方式加载模块,模块的加载不会影响它后面语句的执行。所以 依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会执行。
  • AMD 采用 require() 语句加载模块,但是不同于 CommonJS,它要求两个参数。
// 简写方式
require([module], callback);
// 普通方式
require(['math'], function (math) {
    math.add(2, 3);
});
/**
    第一个参数 [module] 是一个数组,里面的成员都是要加载的模块;
    第二个参数是callback,则是加载成功之后的回调函数。
    如果将前面的代码改成AMD 形式,就是上面的普通方式

    math.add() 与 math 模块加载不是同步的,浏览器不会发生假死,所以很显然,AMD 比较适合于浏览器环境。
*/

CMD 规范

  • CMD 即通用模块定义,是国内发展出来的,是 seajs 推崇的规范,CMD 是依赖就近,
define(function (require, exports, module) {
    var clock = require('clock');
    clock.start();
});