【问题标题】:Efficiency of Browserify with multiple bundlesBrowserify 与多个捆绑包的效率
【发布时间】:2015-03-01 07:01:29
【问题描述】:

我是 Browserify 的新手,我正在尝试弄清楚如何使其在客户端需要下载的量方面更高效。

我有一个网络应用程序,它使用许多不同的 3rd 方库和自定义代码。使用 Browserify,人们建议的一般方法似乎是将所有内容打包成一个大的bundle.js。由于以下几个原因,这对我来说似乎非常低效:

例如,假设您的 bundle.js 包含 lib1, lib2, lib3, customLib

  1. 如果您的网络应用程序的一部分只需要lib1,客户端仍然需要下载一个巨大的bundle.js,并且最终不会使用其中的 75%。浪费的字节下载。不必要地增加了页面加载时间。
  2. 如果您的customLib 是您经常迭代的一段代码,那么每次它发生更改时,您的客户都必须重新下载bundle.js,再次下载大量未更改的第三方库...

您的网络应用程序的其他部分可能使用lib2lib3,但客户端可能会或可能不会去那里,他肯定会浪费带宽下载整个bundle.js

我看到了将捆绑包拆分为多个捆绑包的建议。但是为了什么目的?如果一个页面使用lib1,另一个页面使用lib1lib2,另一个页面使用lib2lib3,那么如何拆分呢?您将其拆分为多个捆绑包的次数越多,您不是就失去了bundle.js 的优势吗?

Browserify 似乎受到高度重视,所以我希望我只是在这里遗漏了一些东西。将许多库和自定义脚本捆绑在一起的正确方法是什么?人们称 Browserify 为“脚本加载器”,但我过去见过的每个脚本加载器(如 yepnope 等)都使用逻辑来确定要下载哪些脚本,这似乎是一个更有效的解决方案,而 Browserify 似乎想要客户端下载所有内容...

【问题讨论】:

标签: javascript browserify dynamic-script-loading


【解决方案1】:

不确定答案是否适合 SO 格式。不过还是...

手册的Partitioning Section描述了以下2种技术

  1. factor-bundle 因素 2 个或更多入口点将公共依赖项放入单个包中。

  2. partition-bundle 与 factor-bundle 相同,但使用异步 loadjs 函数进行运行时加载。

因子束

<script src="/bundle/common.js"></script>
<script src="/bundle/x.js"></script>

带有异步加载回退的分区包

loadjs(['./x'], function(x){...});

【讨论】:

  • 你必须使用闭包来加载模块吗?不能在闭包之外使用吗?
  • 我对此表示怀疑。您必须以某种方式确保模块已加载。 loadjs 在第一次调用时发出请求并缓存结果。因此,后续调用没有开销。有点像 AMDish 的做事方式。
  • @YuryTarabanko。我正在尝试使用分区包加载文件。这是我的情况:模块 'a' 位于 /js/bundle-user.js 中,此 js 文件位于 /js/ 可访问的公共文件夹中 该页面托管在 localhost:8888/settings。我正在此文件中尝试 loadjs('./a') 但它尝试从 localhost:8888/bundle-user.js 加载 bundle-user.js 而不是从 localhost:8888/js/bundle-user.js 任何想法如何解决这个问题。?
【解决方案2】:

子堆栈只是 published this gist 解释如何拆分捆绑包。他建议像这样使用factor-bundle

browserify x.js y.js -p [ factor-bundle -o bundle/x.js -o y.js ] \
  -o bundle/common.js

【讨论】:

    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多