太坑了是什么意思。没有相关问题

执行模块的机制大不一样

由于 RequireJS 是執行的 AMD 规范, 因此所有的依赖模块都是先执行.

希望文章没有误人子弟, 谢谢 的意见, 请大家多看评论, 评论更有料...

SeaJS对模块的态度是懒执行, 而RequireJS对模块嘚态度是预执行

不明白? 让我们来举个例子



先试试SeaJS的执行结果

很正常嘛, 我也是这么想的...

神马情况? 你他么是在逗我吗?

RequireJS你坑的我一滚啊, 这也就是為什么我不喜欢RequireJS的原因, 坑隐藏得太深了.

SeaJS只会在真正需要使用(依赖)模块时才执行该模块

SeaJS是异步加载模块的没错, 但执行模块的顺序也是严格按照模块在代码中出现(require)的顺序, 这样才更符合逻辑吧! 你说呢, RequireJS?

而RequireJS会先尽早地执行(依赖)模块, 相当于所有的require都被提前了, 而且模块执行的顺序也不一定100%僦是先mod1再mod2

因此你看到执行顺序和你预想的完全不一样! 颤抖吧~ RequireJS!

注意我这里说的是执行(真正运行define中的代码)模块, 而非加载(load文件)模块.

模块的加载都昰并行的, 没有区别, 区别在于执行模块的时机, 或者说是解析.

为了说明阻塞的问题, 翠花上图

注意图中巨大的pinyin-dict.js模块, 取自, 复制了N次后以增加它的"重量", 增强演示效果, 大家有兴趣的话可以亲手试试.

可以很明显的看出RequireJS的做法是并行加载所有依赖的模块, 并完成解析后, 再开始执行其他代码, 因此執行结果只会"停顿"1次, 完成整个过程是会比SeaJS要快.

而SeaJS一样是并行加载所有依赖的模块, 但不会立即执行模块, 等到真正需要(require)的时候才开始解析, 这里耗费了时间, 因为这个特例中的模块巨大, 因此造成"停顿"2次的现象, 这就是我所说的SeaJS中的"懒执行".

最后感谢大家的各种意见建议, 我这里并没有说SeaJS与RequireJS哪个更好一些, 仅仅是为了说明下他们的区别, 各种取舍请大家根据实际情况来定, 希望能帮到大家.

可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题

我要回帖

更多关于 系统之网文别太坑 的文章

 

随机推荐