JavaScript模块化编程



说起模块化编程,经常会听到什么CMD、AMD、CommonJS,记录一下自己的理解,虽然自己用得不是很多。

CommonJS

NodeJS就是参照CommonJS规范实现的

// 导出
module.export math = ...
// 引入
var math = require('math');

但是存在一个问题,就是必须等模块导入了,才能继续运行。
这样就非常不适合浏览器,因为如果网速慢,就会一直等待等待,就会出现"假死"的情况。
所以就可以采用异步的方式,这个就是AMD

AMD

AMD(“Asynchronous Module Definition”),就是“异步模块加载”,就是在引入某一个模块时,写入一个回调函数,等模块加载完成就会执行回调函数。
需要提前下载好require.js,并且在html中引入

// 引入require.js
// html内容
<div>
  <h1>Require Demo 1 -- usage of Require()</h1>
  <button id="contentBtn">Click me</button>
  <p id="messagebox"></p>
</div>
<script
  data-main="js/script/main.js"
  src="js/lib/require.min.js"
  type="text/javascript"
></script>
// 导出一个desc.js的文件
define(function() {
  return {
    decs: 'this js will be request only if it is needed'
  };
});
// 使用,一个main.js的文件
require.config({
paths: {
// 可以引入公共模块
    jquery: '../lib/jquery-3.4.1'
  }
});
require(['jquery'], function($) {
  $(document).on('click', '#contentBtn', function() {
    $('#messagebox').html('You have access Jquery by using require()');
  });
});
require(['../script/desc'], function(desc) {
  alert(JSON.stringify(desc));
});

CMD

CMD是国内发展起来的规范,我觉得和AMD很相似,AMD需要一个require.js,CMD需要一个ses.js

// 定义模块  myModule.js
define(function(require, exports, module) {
// 区别:AMD在引入其他模块,是会回调函数的一个参数,而CMD是在回调函数中引入
  var $ = require('jquery.js');
});
// 加载模块
seajs.use(['myModule.js'], function(my){});

AMD和CMD的区别

1、AMD推崇依赖前置,在定义模块的时候就要声明其依赖的模块
2、CMD推崇就近依赖,只有在用到某个模块的时候再去require
其他几乎所有的区别都是基于其他模块的导入使用所衍生:AMD用户体验好,因为没有延迟,依赖模块提前执行了,CMD性能好,因为只有用户需要的时候才执行的原因

requireJS下载地址
seaJS下载地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值