前端开发笔记让前端飞饥人谷技术博客

AMD_CMD_RequireJS

2018-01-26  本文已影响51人  _Dot912

为什么要使用模块化?

CommonJS、AMD、CMD规范分别指什么,有哪些应用?

CommonJS:

在网页端没有模块化编程,只是页面的JavaScript逻辑复杂,但也可以工作下去,但在服务器端却一定要有模块,所以虽然JavaScript在web端发展这么多年,第一个流行的模块化规范却由服务器端的JavaScript应用带来,CommonJS规范由NodeJS发扬光大,这标志着JavaScript模块化编程正式登上舞台。
规范:

例子:

var clock = require('clock'); 
clock.start(); 

这种写法适合服务端,因为在服务器读取模块都是在本地磁盘,加载速度很快,但是如果在客户端,加载模块的时候有可能出现“假死”状况。比如上面的例子中clock的调用必须等待clock.js请求成功,加载完毕。那么,能不能异步加载模块呢?这时就出现了AMD和CMD规范

应用:NodeJs

AMD:

Asynchronous Module Definition,异步模块定义,是一个在浏览器端模块化开发的规范。由于不是JavaScript原生支持,使用AMD规范进行页面开发需要用到对应的库函数,也就是大名鼎鼎RequireJS,实际上AMD 是 RequireJS 在推广过程中对模块定义的规范化的产出。

RequireJS主要解决两个问题:

在AMD上写一个模块,先定义所有依赖,然后在加载完成后的回调函数中执行。

require(['clock'],function(clock){
    clock.start(); 
}); 

应用:RequireJS、curl、Dojo

CMD:

Common Module Definition通用模块定义,CMD规范是国内发展出来的,就像AMD有个RequireJS,CMD有个浏览器的实现SeaJS,SeaJS要解决的问题和RequireJS一样,只不过在模块定义方式和模块解析时机上有所不同。

Sea.js推崇一个文件一个文件,遵循统一的写法,使用Sea.js进行模块化开发可以带来很多好处:

在CMD上写一个模块:

define(function(require, exports, module) { 
    var clock = require('clock'); 
    clock.start(); 
});

应用:SeaJS

AMD VS CMD

区别:

总结:
AMD用户体验好,依赖模块提前执行了所以没有延迟,CMD性能好,只有用户需要的时候才执行。


参考资料

上一篇 下一篇

猜你喜欢

热点阅读