依照玉伯等人在新浪上的答问整理。整理中。。。

AMD 规范在此间:https://github.com/amdjs/amdjs-api/wiki/AMD

CMD 规范在此处:https://github.com/seajs/seajs/issues/242

背景

要想将JavaScript提高到和其余编程语言一个级另外编程体验,包管理是一个不可以不之物。

最初如labjs首先解决的是js文件加载管理的问题。

LABjs 的主干是 LAB(Loading and Blocking):Loading
指异步并行加载,Blocking 是指同步等待执行。LABjs 通过优雅的语法(script
和 wait)实现了这两大特色,主题价值是性质优化。LABjs 是一个文件加载器。

RequireJS 和 SeaJS
则是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript
的模块化开发变得更简便自然。

模块加载器一般可降级为文件加载器用,由此利用 RequireJS 和
SeaJS,也得以高达 LABjs 的性能优化目标。

Intel 是 RequireJS 在松手过程中对模块定义的规范化产出。

CMD 是 SeaJS 在拓宽过程中对模块定义的规范化产出。

恍如的还有 CommonJS Modules/2.0 规范,是 BravoJS
在推广过程中对模块定义的规范化产出。还有许多⋯⋯

这一个规范的目标都是为着 JavaScript
的模块化开发,特别是在浏览器端的。目前那一个专业的兑现都能落得浏览器端模块化开发的目标。一般的话,英特尔擅长在浏览器端、CMD擅长在服务器端。

AMD与CMD区别

  1. 对此依靠的模块,英特尔 是提前实施,CMD 是延迟执行。但是 RequireJS 从
    2.0 先导,也改成可以延缓执行(按照写法不同,处理格局不同)。CMD 推崇
    as lazy as possible.

  2. CMD 推崇倚重就近,Intel 推崇依赖前置。看代码:

    // CMD
    define(function(require, exports, module) {
    var a = require(‘./a’)
    a.doSomething()// 此处略去 100 行
    var b = require(‘./b’) // 倚重可以就地书写
    b.doSomething()// …
    })

    // Intel 默认推荐的是
    define([‘./a’, ‘./b’], function(a, b) { // 倚重必须一起初就写好
    a.doSomething()// 此处略去 100 行
    b.doSomething()…
    })

虽然 AMD 也协助 CMD 的写法,同时还援助将 require 作为依靠项传递,但
RequireJS
的撰稿人默认是最欢喜上边的写法,也是官方文档里默认的模块定义写法。

  1. AMD 的 API 默认是一个当两个用,CMD 的 API
    严苛区别,推崇职责单一。比如 AMD 里,require 分全局 require 和局部
    require,都叫 require。CMD 里,没有大局
    require,而是依据模块系统的完备性,提供 seajs.use
    来实现模块系统的加载启动。CMD 里,每个 API 都简单纯粹。

  2. 再有部分细节差别,具体看那些专业的概念就好,就不多说了。

除此以外,SeaJS 和 RequireJS
的歧异,可以参见:https://github.com/seajs/seajs/issues/277

RequireJS 和 SeaJS区别

RequireJS 和 SeaJS 都是很科学的模块加载器,两者分别如下:

  1. 六头定位有距离。RequireJS 想成为浏览器端的模块加载器,同时也想变成
    Rhino / Node 等环境的模块加载器。SeaJS 则在意于 Web
    浏览器端,同时经过 Node 增加的措施可以很便宜跑在 Node 服务器端

  2. 两边听从的正经有差距。RequireJS 听从的是
    Intel(异步模块定义)规范,SeaJS 坚守的是 CMD
    (通用模块定义)规范。规范的两样,导致了二者 API 的不比。SeaJS
    更简单优雅,更近乎 CommonJS Modules/1.1 和 Node Modules 规范。

  3. 二者社区观点有异样。RequireJS 在尝试让第三方类库修改自身来支撑
    RequireJS,目前只有个别社区接纳。SeaJS
    不强推,而使用独立封装的主意来“海纳百川”,如今已有较成熟的包裹策略。

  4. 相互代码质地有异样。RequireJS 是尚未明确的 bug,SeaJS 是家喻户晓没有
    bug。

  5. 五头对调节等的支撑有出入。SeaJS 通过插件,可以实现 Fiddler
    中活动映射的效能,还足以兑现全自动 combo
    等功用,相当便宜方便。RequireJS 无这下边的支撑。

  6. 五头的插件机制有异样。RequireJS
    采纳的是在源码中留给接口的情势,源码中留有为插件而写的代码。SeaJS
    选拔的插件机制则与 Node
    的点子同样:开放本身,让插件开发者可一向访问或涂改,从而相当灵活,可以兑现各类类型的插件。

再有为数不少细节差距就不多说了。

可想而知,SeaJS 从 API 到实现,都比 RequireJS 更简洁优雅。即便说 RequireJS
是 Prototype 类库的话,则 SeaJS 是 jQuery 类库。

其外人经验

用了5年多的RequireJs,和一段时间的SeaJs,补充一下分别吧,

1、对于第3点,其实,RequireJS早有了Shim等协理,不需要修改第三方类库就足以完全襄助.如Ember,JQuery等援引,都直接可以异步加载为一个模块.

2、对于调试的支撑,RequireJS2.1版本也补助了.

3、RequireJs的打包效率很强劲,很符合在CI下做各样配置下的打包发布,非凡灵活方便,SeaJs这下面略力不从心.

4、对于模块的语法,RequireJs相比灵敏,扶助类似于SeaJs的语法

5、总体来说多少个框架都很不错.SeaJs借鉴了先驱框架的大队人马亮点,发展势头不错.

RequireJs协助更宏观一些,如Txt等文件文件的依赖,多版本的Js倚重,多语言扶助,打包比SeaJs要简明些,在Jenkins等CI环境中,不受系统环境的限制.文档和范例比SeaJs全多了.缺点是:官方更新相比较快,有过多次新本子都微微不般配,假设您英文相比较费劲,看文档可能就相比较痛苦了.

SeaJs很简单,很多效用也在逐步完善,但底层细节表露相比多,文档需要再补充些.期望在今后能积极,加以改进.

其旁人经验二

就自己个人利用来看,requirejs上手就比seajs容易的多。

1.seajs打包spm实在是太难了,那跟r.js比起来简直不是一个程度。

2.requirejs援助css
@import依赖的卷入,对于不爱好使用less的童鞋,就便宜多了。

3.对此非Intel规范的js插件,require js提供了shim协助,卓殊便利。

4.requirejs目前协助了sourcemap,配合grunt,简直爽爆了。

出于从右边和布局上的方便性来看,我最终放弃了seajs。

相关文章

网站地图xml地图