他们两者的共同点就是都是一种框架在推广的过程中对模块定义的规范产出;而且他们都是异步加载模块。

AMD即Asynchronous Module Definition,翻译过来就是异步模块化定义,是一个模块化开发的规范。此处是规范链接 那么AMD是怎么弄出来的呢?其实AMD是在RequireJS之后才出来的,是大名鼎鼎的RequireJS产出了这一套模块化开发的概念。那么谈AMD就必须先谈RequireJS.

RequireJS解决了前端开发过程中的两大问题,一个是文件之间的依赖问题,一个是浏览器加载多个JS文件时页面失去响应的时间过长。这两个问题导致人们开发出这样的一个框架来。RequireJS是外国人开发出来的,所有你可以看到,RequireJS的官网全是英文!

CMD即 common moudle definition,翻译过来即通用模块定义。此处是规范定义CDM规范是国人开发出来的,这确实为国内的前端行业争了口气了。同样的,CMD也有个浏览器的实现,这就是常常听见别人说的SeaJS了。

SeaJS和RequireJS解决的是同样的问题,然而它模块定义的方式和模块加载时机确是不同的!!!

1.RequireJS在主文件里是将所有的文件同时加载,然而SeaJS强调一个文件一个模块。

2.AMD推崇依赖前置,CMD推崇依赖就近。

什么意思呢?就是AMD在定义模块的时候要先声明其依赖的模块。例如这样:

define(['jquery'],function($){
    var  backButton=$('.backToTop');
   function  animate(){
        $('html,body').animate({
             scrollTop:0
            },800);
        };
    function scroll(){
         if($(window).scrollTop()>$(window).height())
            backButton.fadeIn();
        else
            backButton.fadeOut();
    };
    backButton.on('click',animate);
    $(window).on('scroll', scroll);
    $(window).trigger('scroll');
return{
    animate:animate,
    scroll:scroll
};
});

CMD没有这里严格的要求,它只要依赖的模块在附近就可以了,例如下面这样:

// CMD
define(function(require, exports, module) {
var a = require('./a')
a.doSomething()
// 此处略去 100 行
var b = require('./b') // 依赖可以就近书写
b.doSomething()
// ... 
})

划重点了!AMD和CMD最大的区别不是说上面的两点,而是他们俩对依赖模块的执行时机有所不同!!!对依赖模块的执行时机取决于他们的模块定义方式,AMD推崇依赖前置,因此,JS可以及其轻巧地知道某个模块依赖的模块是哪一个,因此可以立即加载那个模块;而CMD是就近依赖,它要等到所有的模块变为字符串,解析一遍之后才知道他们之间的依赖关系,这在别人看来是牺牲了性能换来开发的便利性。然而我要告诉你的是解析模块用的时间短的可以忽略不计,所以这又有什么关系呢?

那么说了那么多,他们是怎么执行的呢?

AMD加载完模块后,就立马执行该模块;CMD加载完某个模块后没有立即执行而是等到遇到require语句的时再执行。

所以,他们两者的不同导致各自的优点是AMD用户体验好,因为模块提前执行了;CMD性能好,因为只有用户需要的时候才执行。
---------------------

转自:https://blog.csdn.net/e_li_na/article/details/72082763

AMD和CMD的区别相关推荐

  1. AMD 和 CMD 的区别有哪些? (玉伯)

    AMD 和 CMD 的区别有哪些? 作者:玉伯 链接:https://www.zhihu.com/question/20351507/answer/14859415 来源:知乎 AMD 规范在这里:h ...

  2. 前端模块化,AMD与CMD的区别

    在JavaScript发展初期就是为了实现简单的页面交互逻辑,寥寥数语即可:如今CPU.浏览器性能得到了极大的提升,很多页面逻辑迁移到了客户端(表单验证等),随着web2.0时代的到来,Ajax技术得 ...

  3. AMD和CMD的区别,转载玉伯在知乎上的回答。

    AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMD CMD 规范在这里:https://github.com/seajs/seajs/issue ...

  4. 【AMD和CMD的区别】

    最主要的是: AMD是预加载,CMD是懒加载.AMD是提前执行,CMD是延迟执行. amd (在对应的加载之前导入),cmd(在用的时候导入). 以下为相关补充: AMD AMD 即Asynchron ...

  5. 前端开发 AMD 和 CMD 的规范区别

    AMD 规范在这里:https://github.com/amdjs/amdjs-api/wiki/AMD CMD 规范在这里:https://github.com/seajs/seajs/issue ...

  6. JavaScript模块化 --- Commonjs、AMD、CMD、es6 modules

    随着前端js代码复杂度的提高,JavaScript模块化这个概念便被提出来,前端社区也不断地实现前端模块化,直到es6对其进行了规范,下面就介绍JavaScript模块化. 这篇文章还是希望能给大家一 ...

  7. 理解AMD ,CMD,CommonJS规范

    https://blog.csdn.net/xcymorningsun/article/details/52709608 理解AMD ,CMD,CommonJS规范 2016年09月30日 10:33 ...

  8. 模块化 AMD与CMD 规范

    JavaSript模块规范 - AMD规范与CMD规范介绍 2014-02-19 13:12:01 分类: JavaScript JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单 ...

  9. CommonJS,AMD,CMD区别 - 郑星阳 - ITeye博客

    CommonJS,AMD,CMD区别 博客分类: seajs和requirejs JavaScript zccst转载 学得比较晕,再次看commonjs,amd, cmd时好像还是没完全弄清楚,今天 ...

最新文章

  1. Maven学习总结(五)——聚合与继承
  2. android 判断有线耳机、蓝牙耳机连接
  3. 存根类 测试代码 java_有关为旧版代码创建存根的更多信息–测试技术7
  4. 使用jquery图表插件jqplot之折线图
  5. Shadow Defender 语言文件并注册
  6. 权限管理系统之用户管理
  7. 这个严重 0day 可导致79款 Netgear 路由器遭远程接管,无补丁
  8. 大数据分析如何应用在驾驶世界
  9. Jersey学习笔记
  10. threejs 加载obj模型
  11. Android——TextView实现真正的跑马灯效果
  12. 2022内蒙古最新建筑施工电工(建筑特种作业)模拟考试试题及答案
  13. 属牛的女宝宝取名:聪明上进、清秀纯真的女孩名字
  14. PHP 接入微信公众账号API
  15. 推荐我看过的几本好书给大家
  16. 2014微软校园招聘笔试试题(英文)
  17. 一意孤行亚马逊----一个钓鱼疯子的巴西亚马逊之行( 5.九月21日 亚马逊的鱼并不好钓) 作者:咸水鱼...
  18. iconfont 字体图标
  19. Python攻城师的成长————MySQL数据库关键字
  20. 在印度与软件相关的发明可不可以申请专利?

热门文章

  1. flex布局父项常见属性justify-content
  2. iPad该如何运行Python代码?
  3. 名称 WORKGROUP:1d 不能注册到 IP 地址 192.168.99.185 的界面上。
  4. python 框架tornado_PythonWEB框架之Tornado
  5. 网站分析平台:百度统计、谷歌统计、网数星,统计平台怎样选择?
  6. 头条飞聊呼之欲出,击败微信难,却可能成为下一个Instagram
  7. 前苏联人民热情拥抱小企鹅
  8. linux qt写入excel文件内容,Qt——读入txt文件,写入到表格
  9. android倒计时停止,Android 使用 Timer 做倒计时。实现开始 (start),取消 (cancel),暂停 (pause),重开 (resume)功能...
  10. 第一次写学术论文无从下手咋办?