0

有人将 LabJs 与 javascriptmvc 窃取结合使用吗?意味着在子级别寻找依赖加载以及利用 LabJs 的异步性能提升。

一个.js

......

steal(../b.js) .then(../c.js) //c.js 需要先加载 b.js 和 d.js 才能加载

b.js

......

steal(../d.js) //(b.js调用时需要加载d.js,加载d.js以便更好的分类和维护)

labjs + 偷窃的任何文章或经验都会很棒。

4

2 回答 2

0

Stee 会将您的生产应用程序构建到单个 JS 文件中。您可以根据需要加载该文件。

于 2012-05-08T16:44:11.153 回答
0

暂时不考虑偷窃为您构建一个文件...

注释嵌套在每个脚本中的依赖项的概念意味着,就其本身而言,您不能充分利用并行加载,因为加载器在完成加载 A 并且可以看到它需要 B 和C. 当然,一旦知道了 B 和 C,它可以并行加载这两个,但它不能与 A 并行加载 B 和 C。

另一个问题是 LABjs(和大多数其他动态脚本加载器)严格来说是非阻塞行为,所以如果你加载一些这样的脚本,你会遇到一个问题:

A -- 取决于 B 和 C

D -- 取决于 A 和 E

当 A 完成加载,然后您开始加载 B 和 C 时,您不能本机(没有额外的预努力)让 D 等到 B 和 C(以及 A)完成。

这背后的原因很难解释,但可以说,这种情况对于使用嵌套依赖注解的动态加载来说是有问题的。


但是,如果您在一开始就知道依赖关系树(也就是说,您不会等待加载脚本来了解它们的嵌套依赖关系注释),那么您可以轻松利用动态并行加载,同时确保保留顺序。您可以轻松地做到这一点:

B C A E D

并并行加载所有 5 个,同时仍确保它们按照说明的正确顺序执行。找出依赖关系树和必要的执行顺序的最佳方法是建立一个遍历所有脚本并确定列表是什么及其必要顺序的构建过程。

使用 LABjs,上面的链看起来像这样:

$LAB.setOptions({AlwaysPreserveOrder:true}).script([B,C,A,E,D]);

假设您一开始就知道该列表/顺序是什么,则非常简单明了。只需让您的构建脚本将那一行代码放到您的 HTML 页面中,然后繁荣,您就很好了。

如果您没有这样的构建脚本来执行此操作(我有自己的构建脚本,我已经为需要这种类型的各种项目构建了),您有两种选择:

  1. 不要使用嵌套的依赖注解。自己管理你的依赖列表(上面的列表),并确保它的顺序正确。十年或更长时间以来,人们在浏览器中使用脚本标签的方式一直很好,因此对于大多数网站来说可能已经足够了。我在我手动管理的许多站点上都有 LABjs 链,这完全没有问题,成千上万的其他使用 LABjs 的站点也是如此。

  2. 使用构建脚本(如 Steal),将它们全部放在一个文件中(当然,它也必须找出正确的顺序!)。您没有获得并行加载的好处。真可惜。

希望这能对手头的问题有所了解。

于 2012-05-10T02:07:43.513 回答