您好,游客注册登录繁體
首页 >> seajs >> SeaJS与RequireJS最大的区别

SeaJS与RequireJS最大的区别

Gavin 2015-04-13 0
浏览次数979

执行模块的机制大不一样

由于 RequireJS 是执行的 AMD 规范, 因此所有的依赖模块都是先执行.
使用 RequireJS 默认定义模块的方式, 在理解上会更清楚一些, 但个人还是偏爱 require('./mod1') 这样的方式

define(['dep1', 'dep2'], function (dep1, dep2) {
//Define the module value by returning a value.
return function () {};
});

SeaJS对模块的态度是懒执行, 而RequireJS对模块的态度是预执行
如下模块通过SeaJS/RequireJS来加载, 执行结果会是怎样?

define(function(require, exports, module) {
console.log('require module: main');

var mod1 = require('./mod1');
mod1.hello();
var mod2 = require('./mod2');
mod2.hello();

return {
hello: function() {
console.log('hello main');
}
};
});

先试试SeaJS的执行结果

require module: main
require module: mod1
hello mod1
require module: mod2
hello mod2
hello main

再来是RequireJS的执行结果

require module: mod1
require module: mod2
require module: main
hello mod1
hello mod2
hello main

RequireJS你坑的我一滚啊, 这也就是为什么我不喜欢RequireJS的原因, 坑隐藏得太深了.
终于明白玉伯说的那句: "RequireJS 是没有明显的 bug,SeaJS 是明显没有 bug"是什么意思了

因此我们得出结论(分别使用SeaJS 2.0.0和RequireJS 2.1.6进行测试)

SeaJS只会在真正需要使用(依赖)模块时才执行该模块
SeaJS是异步加载模块的没错, 但执行模块的顺序也是严格按照模块在代码中出现(require)的顺序, 这样才更符合逻辑吧! 你说呢, RequireJS?

而RequireJS会先尽早地执行(依赖)模块, 相当于所有的require都被提前了, 而且模块执行的顺序也不一定100%就是先mod1再mod2
因此你看到执行顺序和你预想的完全不一样! 颤抖吧~ RequireJS!

学习来源:http://www.douban.com/note/283566440/

全部评论:0

需要登录才能发表评论!

需要 登录 才能发表评论

<