可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题
执行模块的机制大不一样
由于 RequireJS 是執行的 AMD 规范, 因此所有的依赖模块都是先执行.
希望文章没有误人子弟, 谢谢 的意见, 请大家多看评论, 评论更有料...
SeaJS对模块的态度是懒执行, 而RequireJS对模块嘚态度是预执行
不明白? 让我们来举个例子
先试试SeaJS的执行结果
很正常嘛, 我也是这么想的... |
神马情况? 你他么是在逗我吗? |
SeaJS只会在真正需要使用(依赖)模块时才执行该模块
SeaJS是异步加载模块的没错, 但执行模块的顺序也是严格按照模块在代码中出现(require)的顺序, 这样才更符合逻辑吧! 你说呢, RequireJS?
而RequireJS会先尽早地执行(依赖)模块, 相当于所有的require都被提前了, 而且模块执行的顺序也不一定100%僦是先mod1再mod2
因此你看到执行顺序和你预想的完全不一样! 颤抖吧~ RequireJS!
注意我这里说的是执行(真正运行define中的代码)模块, 而非加载(load文件)模块.
模块的加载都昰并行的, 没有区别, 区别在于执行模块的时机, 或者说是解析.
为了说明阻塞的问题, 翠花上图
可以很明显的看出RequireJS的做法是并行加载所有依赖的模块, 并完成解析后, 再开始执行其他代码, 因此執行结果只会"停顿"1次, 完成整个过程是会比SeaJS要快.
而SeaJS一样是并行加载所有依赖的模块, 但不会立即执行模块, 等到真正需要(require)的时候才开始解析, 这里耗费了时间, 因为这个特例中的模块巨大, 因此造成"停顿"2次的现象, 这就是我所说的SeaJS中的"懒执行".
最后感谢大家的各种意见建议, 我这里并没有说SeaJS与RequireJS哪个更好一些, 仅仅是为了说明下他们的区别, 各种取舍请大家根据实际情况来定, 希望能帮到大家.
可选中1个或多个下面的关键词搜索相关资料。也可直接点“搜索资料”搜索整个问题