问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

与AMD和CommonJS相比,UMD有什么缺点?

发布网友 发布时间:2022-05-16 09:31

我来回答

2个回答

懂视网 时间:2022-05-16 13:52

我所了解的三种模块加载方式分别是CommonJS、AMD和CMD

网上关于这三种模块加载方式讲解的文章很多,我就简单的做个介绍,如果想深入了解一下可以去网上查阅一下相关的资料。

(1)CommonJS

在CommonJS中,一个单独的文件就是一个模块。被调用模块内使用exports暴露接口,调用模块使用require调用暴露出来的接口。

示例如下:

// student.js
// 私有变量
var a = 123;
function add(student) {
 console.log('Add student:' + student);
}
// exports对象上的方法和变量是外部可访问的
exports.add = add;

1 // 使用require加载student.js模块2 var student = require('./student.js');

CommonJS加载模块是“同步”的,也就是说,如果我们要调用被调用模块中的公共方法和变量,一定要等被调用模块加载完毕后才可以。用于服务端的NodeJS就采用的CommonJS来管理模块。但是在浏览器端,同步加载会因为收到网络环境的影响存在很大的不确定性,所以CommonJS不适合于浏览器端。

如果在浏览器环境下想要从服务器加载模块,就必须使用“异步”的方式。所以就出现了AMD和CMD解决方案。

(2)AMD(Asynchromous Module Definition)

requireJS就是一种使用AMD异步加载模块的管理插件。AMD模块支持对象,函数,构造器,字符串,JSON等各种类型的模块。

AMD规范使用define方法定义模块:

//define(param1,param2) 通过define方法定义模块
//@param1: 数组,元素为引入的依赖模块
//@param2: 回调函数,通过形参传入依赖
define(['firstModule','secondModule'],function(firstModule,secondModule){
 function foo(){
  firstModule.test();
 }
 // 暴露foo()
 return {foo:foo};
});

同时,AMD允许使用define方法定义模块是兼容CommonJS规范,可以使用require和exports。

define(function(require,exports,module){
 var reqModule = require("./firstModule");
 reqModule.test();

 exports.pubPort = function(){
  // 函数体
 }
});

(3)CMD

CMD和AMD的区别主要体现在对依赖模块的执行时机上,AMD是“依赖前置”。主张提前加载所需模块,CMD是“依赖就近”。也就是可以用到的时候再加载。有点类似于Java中的“饿汉模式”和“懒汉模式”。

从requireJS 2.0开始,也可以延迟加载了。

举个栗子:

// AMD——依赖前置
define(['./a','./b'],function(a,b){
 //提前声明要依赖的模块
});

// CMD
define(function(require,exports,module){
 //依赖可以就近写
 var a = require('./a');
 a.test();

 //软依赖
 if(status){
 var b = require('./b');
 b.test();
 }

这里有个名词叫软依赖,我个人理解软依赖就是不一定依赖,硬依赖就是一定会依赖的模块,软依赖就是需要才依赖,不需要就不依赖,根据status判断。

(4)UMD

UMD——Universal Module Definition,通用的模块定义

UMD等于CommonJS加上AMD。UMD的工作其实就是做了一个判断:

- 先判断当前环境对NodeJs支持的模块是否存在,存在就用Node.js模块模式(exports)。

- 如果不支持,就判断是否支持AMD(define),存在就使用AMD方式加载。

感觉自己对UMD还不是很理解,不知道具体应该怎么去用。还是继续去了解了解。加油!

热心网友 时间:2022-05-16 11:00

就绝对性能而言当前INTEL的高端一定比AMD的高端强,这是不争的事实.但是就娱乐游戏日常学习多媒体我们的一般任务而言,从性价比的角度来看,AMD无疑更出色.干同样的活,例如搬家,INTEL的是5吨卡车,装5吨没有问题,但是,AMD只能装4.5吨,INTEL开价是1万,AMD开价是3千,你说你用哪个呢?大多数人会选择AMD就是说搬家4.5吨绝对可以胜任了,最关键的是价格很便宜.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 我今收到银行信用卡的起诉书,我现在怎么办呢?欠信用卡八万多一分钱都没有还,会有事吗?欠四个月了没有 抱枕76B是什么意思 为什么订购的视频彩铃对方显示不一样 BL 生子文 【求】好看的耽美生子文 收到“起诉状”,银行会真的起诉吗 求大量耽美生子文文 注意我的要求呦 跨运营商拨打电话,对方已经设置5G彩铃,是否可以看到? 求各类BL生子文.一定要HE的 跨运营商拨打电话,对方已经设置视频彩铃,是否可以看到? 不同的运营商互打电话,如一人已经设置视频彩铃,另外一个人可以看到吗? 韩国现代电冰箱 HY∪NDAI是什么品牌冰箱 房产抵押利息一般多少?怎么算? 房产个人抵押银行会产生哪些费用 在银行用房产抵押,为什么放款是扣下7个点? 建筑公司信用存在问题,能不能开银行保函? 建筑公司目前办理银行保函和担保公司保函,为什么总是被要求去和受益人协商保函格式? 关于建筑行业所需要的银行保函,怎样办理 为什么百度的汇率和银行的汇率不一样的 异网用户拨打我的中国电信号码,能看到视频彩铃吗? OPPOA92S听微信语音。突然来信息声音好大刺耳怎么设置? 有没有生子文的耽美小说?要一对一的不虐的,越多越好. 我设了联通视频彩铃,大家都能看到么? 韩国电视剧中文版的有哪些 好看的耽美生子文,HE结局,过程虐点没关系,急啊 银行通过律师给我发民事起诉书之后还款有用吗 一般银行起诉多久开庭 中信信用卡,我欠2个月一共是2800,现在已经收到银行的起诉书了?是怎么一回事 银行发出起诉书 怎么办 收到银行的民事起诉状会上征信吗? 同样都是未婚生育,王子文被赞勇敢,张碧晨为什么被骂动机不纯? 玫瑰花茶准妈妈可以喝吗 DNF中的QP技能是什么意思? qp代表什么标志,意思? dnf的qp tp sp是什么?什么意思 荣成住房公积金查询 如何在网上查威海荣成没用住房公积金贷款,请指教 - 信息提示 电脑装了 Windows8系统,放音乐声音怎么变得小了,驱动没提示有问题,系统设置也都选择到最大了。