SeaJS与RequireJS的区别

SeaJS与RequireJS的区别 
一、遵循的规范不同 
RequireJS 遵循的是 Modules/AMD 规范。 
SeaJS 遵循的 Modules/Wrappings 规范是 CMD 规范。 区别: 
1.对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 
2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible. 
2. CMD 推崇依赖就近,AMD 推崇依赖前置。看代码: 
// CMD 
define(function(require, exports, module) {   var a = require('./a')      a.doSomething()     // 此处略去 100 行    var b = require('./b') // 依赖可以就近书写 
b.doSomething() 
   // ... }) 
// AMD 默认推荐的是 
define(['./a', './b'], function(a, b) { // 依赖必须一开始就写好 
a.doSomething() // 此处略去 100 行 b.doSomething() // ... }) 

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

二、factory 的执行时机不同 

在 RequireJS 里,模块有多种书写格式,推荐的是: 
define(["./a", "./b"], function(a, b) { 
a.doSomething(); b.doSomething();

每个模块都有自己的 factory. 在 AMD 的书写格式下,上面例子中,模块 c 的 factory 在执行时,会接收 a 和 b 两个参数。这意味着,c 依赖的所有模块,都是在一开始就得执行好,即便有可能不需要执行

}); 在 RequireJS 里,模块有多种书写格式,推荐的是: 
define(["./a", "./b"], function(a, b) { 
a.doSomething(); b.doSomething(); 

});


在 SeaJS 里,模块只有一种书写格式: 
define(function(require, exports, module) { 
require("./a").doSomething(); require("./b").doSomething(); }); 
SeaJS 的模块书写格式,RequireJS 也支持。为了便于讨论,我们称呼 define 方法中的 function 参数为模块的 factory. 无论是在 RequireJS 还是 SeaJS 里,在执行 factory 之前,都会确保依赖的模块已经下载好: 
/* a.js */ 
define(factory); /* b.js */ 
define(factory); /* c.js */ 
define(['./a', './b'], factory);

require(‘a’) — gets exports of module a      获取模块的输出 
require(['a']) — fetch module a according to module name scheme根据模块名称a获取模块 
require(['a.js']) — fetch a.js directly relative to current page获取a.js直接关联到当前页面

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值