/loader-test

AMD与CMD的一个简单demo

Primary LanguageJavaScript

loader-test

AMD与CMD的一个简单demo

演示

$ npm install
$ npm start

// console输出
server start at 3000

访问:

结果

CMD

main required
mod1 required
mod1 hello
mod2 required
mod2 hello
main hello

AMD

mod2 required
mod1 required
main required
mod1 hello
mod2 hello
main hello

结论

CMDAMD的区别:

  1. 模块执行机制差别

首先,要清楚模块执行机制和模块加载机制的概念。模块加载机制是指浏览器请求模块的方式,这里两者都是异步请求,因此没有区别。而模块执行机制是指factory的执行顺序。CMD是懒执行的,即执行流从主模块factory开始,如果require到某个依赖模块,则再去执行该依赖模块的factory。而AMD是在执行主模块factory之前,先执行所有依赖模块的factory

  1. 依赖模块的执行顺序差别

在上一条结论里,由于CMD是懒执行的,因此执行顺序始终是一致的。而AMD里各自的依赖模块执行顺序是无序的,即浏览器请求到模块时立即执行factory。在demo的代码里故意延迟加载mod1.js,从输出结果可以看到mod2先执行。

参考