AMD、CMD、CommonJS、ES6(import/export)

AMD、CMD、CommonJS是ES5模块化解决方案

AMD —— 异步模块

Asynchronous Module Definition
AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块
requireJS主要解决两个问题

1、多个js文件可能有依赖关系,被依赖的文件需要早于依赖它的文件加载到浏览器
2、js加载的时候浏览器会停止页面渲染,加载文件越多,页面失去响应时间越长

require()函数在加载依赖的函数的时候是异步加载的,这样浏览器不会失去响应,它指定的回调函数,只有前面的模块都加载成功后,才会运行,解决了依赖性的问题。

RequireJS

// 定义模块
define(["a"], function(a) {        return {}}
);
// 使用模块
require(['a'], function (a) {console.log(a)
});

CMD —— 同步模块

CMD推崇就近依赖,只有在用到某个模块的时候再去require
CMD规范是国内发展出来的,就像AMD有个requireJS,CMD有个浏览器的实现SeaJS,SeaJS要解决的问题和requireJS一样,只不过在模块定义方式和模块加载(可以说运行、解析)时机上有所不同

1.Sea.js 推崇一个模块一个文件,遵循统一的写法

2.CMD加载完某个模块后没有立即执行而是等到遇到require语句的时再执行。

seaJs

CommonJS —— 服务器端模块

CommonJS 加载模块是同步的,所以只有加载完成才能执行后面的操作

AMD 与 CMD
1.对于依赖的模块AMD是提前执行,CMD是延迟执行。不过RequireJS从2.0开始,也改成可以延迟执行(根据写法不同,处理方式不通过)。

2.AMD推崇依赖前置(在定义模块的时候就要声明其依赖的模块),CMD推崇依赖就近(只有在用到某个模块的时候再去require——按需加载)。

//AMD
define([’./a’,’./b’], function (a, b) {

//依赖一开始就写好
a.test();
b.test();

});

//CMD
define(function (requie, exports, module) {

//依赖可以就近书写
var a = require('./a');
a.test();...
//软依赖
if (status) {var b = requie('./b');b.test();
}

});
通俗来说:
AMD在加载完成定义(define)好的模块就会立即执行,所有执行完成后,遇到require才会执行主逻辑。(提前加载)
CMD在加载完成定义(define)好的模块,仅仅是下载不执行,在遇到require才会执行对应的模块。(按需加载)
AMD用户体验好,因为没有延迟,CMD性能好,因为只有用户需要的时候才执行。

import/export ES6模块化

在ES6中每一个模块即是一个文件,在文件中定义的变量,函数,对象在外部是无法获取的。如果你希望外部可以读取模块当中的内容,就必须使用export来对其进行暴露(输出)。
ES6模块:静态加载(编译时加载)
CommonJS 和 AMD 模块:动态加载(运行时加载)
即 ES6 可以在编译时就完成模块加载,效率要比 CommonJS 模块的加载方式高

ES6模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量
CommonJS 和 AMD 模块,都只能在运行时确定这些东西

AMD、CMD、CommonJS、ES6(import/export)相关推荐

  1. AMD规范(RequireJS)、CMD规范(SeaJS)、CommonJS(BravoJS)规范的辨析

    首先,AMD,CMD,CommonJS都实现了文件模块化. 对于依赖的模块:AMD是提前执行:CMD是延迟执行: AMD是依赖前置,CMD是依赖就近: AMD官方解释:https://github.c ...

  2. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——遍历和删除

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析各个容器中遍历和查找的性能.(转载请 ...

  3. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——删除

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析从头部.中间和尾部对各个容器进行删除 ...

  4. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——遍历和查找

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(ubuntu g++)--插入>已给出.本文将分析各个容器中遍历和查找的性能.(转载请指明出于breakso ...

  5. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——删除

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(ubuntu g++)--插入>已给出.本文将分析从头部.中间和尾部对各个容器进行删除的性能.(转载请指明出 ...

  6. Python使用matplotlib可视化散点图、并在可视化图像的底部和右边添加边缘直方图、自定义边缘直方图的色彩(Marginal Histogram)

    Python使用matplotlib可视化散点图.并在可视化图像的底部和右边添加边缘直方图.自定义边缘直方图的色彩(Marginal Histogram) 目录

  7. R语言plotly可视化:使用PCA算法进行数据降维、使用plotly可视化PCA所有的主成分绘制散点图矩阵、降维后的两个(三个)核心主成分的二维、三维可视化图形、方差解释的量、载荷图等

    R语言plotly可视化:使用PCA算法进行数据降维.使用plotly可视化PCA所有的主成分绘制散点图矩阵.降维后的两个(三个)核心主成分的二维.三维可视化图形.方差解释的量.载荷图等 目录

  8. python使用matplotlib可视化subplots子图、为subplots添加主标题(main title)、为subplots的每一个子图添加子图标题(subplots title)

    python使用matplotlib可视化subplots子图.为subplots添加主标题(main title).为subplots的每一个子图添加子图标题(subplots title) 目录

  9. pandas使用pad函数向dataframe特定数据列的每个字符串添加补齐字符或者字符串、向所有字符串的左右两侧填充、直到宽度达到指定要求(both padding)

    pandas使用pad函数向dataframe特定数据列的每个字符串添加补齐字符或者字符串.向所有字符串的左右两侧填充.直到宽度达到指定要求(both padding) 目录

最新文章

  1. XMT.com超200万被区块链终端交易
  2. 2020全球Top10 AI专利公司:美国过半,中国仅占两席
  3. postgresql 编码_开源力量与职业发展 --写给对PostgreSQL有志趣的朋友们
  4. hfs快速搭建HTTP文件服务器
  5. Qt Creator部署到设备
  6. LAMP集群项目四 安装apache、php及其插件
  7. 图像目标分割_6 Mask RCNN
  8. 求1e11以内的素数
  9. 奇安信代码安全实验室帮助Red Hat修复多个QEMU高危漏洞,获官方致谢
  10. ViewDidLoad运行多次的问题
  11. PCB特征阻抗计算工具——Polar SI9000软件下载与安装教程
  12. CSDN博客添加使用百度统计
  13. 使用Androidkiller或APKIDE编译APK文件时出现libpng error: Not a PNG file的错误
  14. Go语言使用之File操作
  15. ARM裸机--看门狗定时器
  16. php 格式化金额(每三位加一逗号)
  17. 致童年,那些年我们逝去的岁月
  18. 【Java进阶营】什么是真正的架构设计?某厂十年Java经验让我总结出了这些,不愧是我
  19. Calico on Kubernetes 从入门到精通
  20. “2021天府金融指数”发布 专家热议绿色金融创新支持低碳转型发展

热门文章

  1. 上传文件到云服务器存储路径,上传文件到云服务器存储路径
  2. cdev linux_Linux设备管理(二)_从cdev_add说起
  3. 拷贝文件不移动_在不使用 mv 命令的情况下移动文件
  4. 扩展 GRTN:云原生趋势下的 RTC 架构演进
  5. Serverless 领域近一年行业发展回顾
  6. Riot美术师经验分享:好设计是改出来的
  7. 写给游戏编程自学者的入门指南
  8. 常见Java面试题 抽象类能使用 final 修饰吗?
  9. Java 01背包【动态规划·蓝桥杯练习题】(相信杨超越,相信锦鲤,默默努力,其它的看天意)
  10. 让CMD窗口显示中文[JAVAC输出中文错误信息乱码的解决]