1、AMD推崇依赖前置,CMD推崇就近依赖
//AMD: mod.jsdefine(['dependency1', 'dependency2'], function(require, exports, module){ //TODO module.exports = {};});复制代码//CMD: mod.jsdefine(function(require, exports, module) { var $ = require('jquery.js') if(true) { let a = require('./a.js'); //TODO } module.exports = {}});复制代码这种区别各有优劣,只是语法上的差距,而且requireJS和SeaJS都支持对方的写法
2、执行时机不同:AMD是加载完立即执行,CMD是延迟执行(二者的最大区别)
立即执行比较好理解,我们来看CMD的延迟执行。还是以上面代码为例
//CMD: mod.jsdefine(function(require, exports, module) { var $ = require('jquery.js') if(true) { let a = require('./a.js'); //TODO } else{ let b = require('./b.js'); //TODO } module.exports = {}});复制代码在执行mod.js前,模块被解析为了字符串,然后通过正则表达式找出了模块中所有的依赖并去一一加载,如例子中的jquery.js、a.js和b.js。但是加载后的依赖并不立即执行,而是当js执行到require语句的时候才被执行。如例子中的juery.js和a.js会按执行顺序依次执行,而b.js因为是在条件控制的else里,所以它永远不会被执行。需要说明一点的是,CMD这种用正则匹配字符串中依赖的行为会影响性能,这也是被大家诟病的。
3、实现按需加载的方法不同
两种规范都可以实现按需加载,但是实现的API不同:
//AMD:define(function(require, exports, module){ document.getelementById('app'). = function() { require(['myModule'], function (my){ my.printName(); }); } //TODO module.exports = {};});复制代码//CMD:define(function(require, exports, module){ document.getelementById('app'). = function() { require.async('myModule', function (my){ my.printName(); }); } //TODO module.exports = {};});原文发布时间:2018-6-20
原文作者: Super Mouse
本文来源掘金如需转载请紧急联系作者
继续阅读与本文标签相同的文章
上一篇 :
Vue响应式数据: Observer模块实现
-
Redux、rematch、dva的替代品:smox
2026-06-02栏目: 教程
-
手把手教你封装Vue组件
2026-06-02栏目: 教程
-
Vue开发的电影预告webApp介绍
2026-06-02栏目: 教程
-
从闭包函数的变量自增的角度 - 解析js垃圾回收机制
2026-06-02栏目: 教程
-
新趋势下的一对一直播
2026-06-02栏目: 教程
