zoukankan      html  css  js  c++  java
  • javascript模块化编程:CommonJS和AMD规范

    AMD规范,异步模块定义。与CommonJS规范齐名并列。 作用都是利于JavaScript的模块化编程。

    模块化编程的好处就是:
    1、可重用
    2、独立
    3、能解决加载的依赖性问题
    4、能解决重复加载问题

    CommonJS是Mozilla 的工程师 Kevin Dangoor 在2009年1月创建的,当时的名字是 ServerJS,后来改名为 CommonJS,以显示其 API 的更广泛实用性。CommonJS是一套规范,创建和核准是开放的,已经有很多版本和具体实现。CommonJS 并不属于 ECMAScript TC39 小组的工作,但 TC39 中的一些成员参与了制定。

    比较而言,CommonJS针对的是服务器和桌面等浏览器之外的环境,而AMD则是for浏览器。或者说,CommonJS同步,是服务器端的规范,而AMD异步,是客户端的规范

    因为对服务器来说,所有的模块都存放在本地硬盘,可以同步加载完成,等待时间就是硬盘的读取时间。但是,对于浏览器,这却是一个大问题,因为模块都放在服务器端,等待时间取决于网速的快慢,可能要等很长时间,浏览器处于”假死”状态。

    因此,AMD规范规定异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

    不过,其实CommonJS也有浏览器端的实现,其原理是现将所有模块都定义好并通过 id 索引,这样就可以方便的在浏览器环境中解析了。

    【CommonJS】
    CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。require方法用于加载模块。

    var x = 5;
    var addX = function (value) {
      return value + x;
    };
    module.exports.x = x;
    module.exports.addX = addX;
    var example = require('./example.js');
    console.log(example.x); // 5
    console.log(example.addX(1)); // 6

    实现CommonJS的代表是node.js。

    【AMD规范】
    本规范只定义了一个函数 “define”,它是全局变量。函数的描述为:

    define(id?, dependencies?, factory);
    id:模块名称,字符串,可选
    dependencies:依赖模块,数组,可选
    factory:回调函数。此函数的参数要与依赖模块一一对应
      require(['math'], function (math) {
        math.add(2, 3);
      });

    目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js。至于CommonJS,主要是node.js吧。然而,2013年5月,Node.js 的包管理器 NPM 的作者 Isaac Z. Schlueter 说 CommonJS 已经过时,Node.js 的内核开发者已经废弃了该规范。

    参考文章:
    CommonJS 规范
    AMD 规范
    Javascript模块化编程(二):AMD规范
    AMD (中文版)

  • 相关阅读:
    批量插入SQL(适用于数据量十万级以上的快速大量插入)
    python爬虫BUG(爬取航班信息)
    python爬虫实例(爬取航班信息)
    python入门基础
    C#生成Guid的几种方式
    微信小程序echart图
    替换SQL字段中的换行符,回车符
    ASP.NET目录
    增删改查程序
    C++中explicit关键字的使用
  • 原文地址:https://www.cnblogs.com/leftfist/p/6808653.html
Copyright © 2011-2022 走看看