gpt4 book ai didi

RequireJS:捆绑还是不捆绑

转载 作者:行者123 更新时间:2023-12-04 01:38:06 25 4
gpt4 key购买 nike

我正在为我的 Web 应用程序使用 RequireJS。我将 EmberJS 用于应用程序框架。我已经到了一个地步,我认为我应该开始将我的应用程序捆绑到一个 js 文件中。这就是我有点困惑的地方:

如果我最终将所有内容捆绑到一个文件中进行部署,那么我的整个应用程序会一次性加载,而不是按需加载。一般来说,捆绑与 AMD 尤其是 RequireJS 不矛盾吗?

更让我困惑的是我在 RequireJS 上发现的内容。网站:

Once you are finished doing development and want to deploy your code for your end users, you can use the optimizer to combine the JavaScript files together and minify it. In the example above, it can combine main.js and helper/util.js into one file and minify the result.



我找到了 similar thread但它没有回答我的问题。

最佳答案

If I finally bundle everything into one file for deployment, then my whole application loads in one shot, instead of on demand. Isn't bundling contradictory to AMD in general and RequireJS in particular?



这并不矛盾。按需加载模块只是 RequireJS 的好处之一。在我的书中,一个更大的好处是模块化有助于使用分而治之的方法。我们可以这样看:即使我们放在单个文件中的所有函数和类都不能从按需加载中受益,但我们仍然编写多个函数和多个类,因为它有助于以结构化的方式分解问题。

然而,我们在开发中创建的多个模块在浏览器中运行应用程序时并不一定有意义。按需加载的最大成本是通过网络发送多个 HTTP 请求。假设您的应用程序有 10 个模块,并且您发送 10 个请求来加载它,因为您分别加载这些模块。您的总成本将是您从 10 个文件中加载字节所必须支付的成本(我们称其为 Pc 表示有效负载成本),加上每个 HTTP 请求的开销成本(我们称其为 Oc,表示开销成本)。开销与启动和关闭这些请求所必须发生的数据和计算有关。它们并非微不足道。所以你支付 Pc + 10*Oc。如果您将所有内容分成一个 block 发送,则您需要支付 Pc + 1*Oc。您已保存 9*Oc。事实上,节省的成本可能更大,因为(因为通常在两端都使用压缩来减少传输数据的大小)如果将整个数据压缩在一起,比将其压缩为 10 个 block ,压缩将提供更大的好处。 (注:以上分析省略了无用的细节。)

有人可能会反对:“但你是在比较单独加载所有模块与将所有模块加载到一个 block 中。如果我们按需加载,那么我们将不会加载所有模块。”事实上,大多数应用程序都有一个核心模块,无论如何都会被加载。这些是应用程序根本无法工作的模块。对于一些小型应用程序,这意味着所有模块,因此将所有模块捆绑在一起是有意义的。对于更大的应用程序,这意味着每次应用程序运行时都会使用一组核心模块,但偶尔会使用一小部分模块。在后一种情况下,优化应该创建 多个捆绑包 .我有一个 application像这样。它是一个具有多种编辑需求模式的编辑器。 90% 的模块都属于核心。无论如何,它们都会被加载和使用,因此捆绑它们是有意义的。模式本身的代码并不总是会被使用,但如果模式完全加载,则将需要给定模式的所有文件,因此每个模式都应该是它自己的包。因此,在这种情况下,具有一个核心包和一系列模式包的模型对于 a) 优化已部署的应用程序但 b) 保持按需加载的一些好处是有意义的。这就是 RequireJS 的美妙之处:它不需要只做一个或另一个。

关于RequireJS:捆绑还是不捆绑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20515679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com