天天看点

AMD规范、CMD规范、CommonJS

AMD规范、CMD规范、CommonJS

一、AMD规范

AMD规范,全称是Asynchronous Module Definition,即异步模块加载机制。完整描述了模块的定义,依赖关系,引用关系以及加载机制。

AMD的核心是预加载,先对依赖的全部文件进行加载,加载完了再进行处理。

实际上AMD 是 RequireJS 在推广过程中对模块定义的规范化的产出
           

优点:

适合在浏览器环境中异步加载模块。可以并行加载多个模块。 并可以按需加载。

RequireJS

主要解决了两个问题:

  1. 多个

    js

    文件可能有依赖关系,被依赖的文件需要早于依赖它的文件加载到浏览器
  2. js

    加载的时候浏览器会停止页面渲染,加载文件越多,页面失去响应时间越长

requireJS的使用:https://www.jianshu.com/p/c90fff39c225

二、CMD规范

CMD规范:全称是Common Module Definition,即通用模块定义。按需加载。在 CMD 规范中,一个模块就是一个文件,使用define来进行模块,define是一个全局函数。

AMD和CMD最大的区别是对依赖模块的执行时机处理不同,而不是加载的时机或者方式不同,二者皆为异步加载模块。

异步加载:不阻碍后面代码加载执行

AMD依赖前置,js可以方便知道依赖模块是谁,立即加载;而CMD就近依赖,需要使用把模块变为字符串解析一遍才知道依赖了哪些模块,这也是很多人诟病CMD的一点,牺牲性能来带来开发的便利性,实际上解析模块用的时间短到可以忽略。

SeaJs使用:https://www.jianshu.com/p/ebdf2233e3fe

三、CommonJS规范

这种写法适合服务端,因为在服务器读取模块都是在本地磁盘,加载速度很快。

CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。

所有代码都运行在模块作用域,不会污染全局作用域。

模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。

模块加载的顺序,按照其在代码中出现的顺序。

参考:https://www.jianshu.com/p/09ffac7a3b2c

继续阅读