75

对于网络人来说,这可能是一个愚蠢的问题。但我对此有点困惑。现在,我有一个应用程序,我在其中使用几个 Javascript 文件来执行不同的任务。现在,我正在使用 Javascript捆绑器来组合和缩小所有文件。因此,在运行时将只有一个 app.min.js 文件。现在,Requirejs用于在运行时加载模块或文件。所以,问题是如果我已经在一个文件中拥有所有东西,那么我需要 requirejs 吗?或者我可以使用 requirejs 和/或 bundler 的用例场景是什么?

如果需要任何进一步的细节,请告诉我。

4

3 回答 3

48

通常,您在开发过程中仅在其加载形式中使用 RequireJS。站点完成并准备好部署后,您可以缩小代码。这里的优点是 RequireJS 确切地知道你的依赖项是什么,因此可以轻松地以正确的顺序缩小代码。这是RequireJS 网站上的内容:

完成开发并希望为最终用户部署代码后,您可以使用优化器将 JavaScript 文件组合在一起并缩小它。在上面的示例中,它可以将 main.js 和 helper/util.js 合并到一个文件中并缩小结果。

于 2012-09-02T02:06:24.653 回答
29

这是许多精通 javascript 开发人员之间激烈争论的问题。许多其他语言都有一个“编译”阶段,在该阶段将整个程序捆绑起来进行部署(想到 JBoss 的 .WAR 文件)。来自更传统背景的程序员通常喜欢这种方法。

近年来,Javascript 的增长如此之快,以至于很难绘制出确切的最佳实践,但那些欣赏 Javascript 更多功能特性的人通常更喜欢模块加载方法(如 require.js 使用)。

我编写的Frame.js与 require.js 非常相似,所以我偏向于模块加载器方法。

要直接回答您的问题,是的,它是一个或另一个。

大多数主张将脚本打包到单个文件中的人认为它可以实现更多压缩,因此更有效。我相信在大多数情况下打包的效率优势可以忽略不计,因为:(1)模块加载时间分布在整个会话中,(2)单个模块可以压缩到几乎相同的百分比,(3)单个模块可以通过服务器和路由器分开,以及 (4) 仅在需要时加载脚本最终允许您为某些用户加载更少的代码,而整体上加载更多的代码。

从长远来看,如果您能看到动态脚本加载的优势,请使用它。如果没有,请将您的脚本捆绑到一个文件中。

于 2012-09-02T02:07:38.423 回答
11

这取决于您的应用程序。如果您正在制作一个仅使用适度 javascript(小于 100kb 缩小)的服务器端应用程序,那么进行完全捆绑,您可能会没事的。

但是,如果您正在制作一个 javascript 应用程序并且其中包含大量代码,那么您的需求将会有所不同。

例如,在我的应用程序中,我捆绑了所有核心文件。有 jQuery、下划线、主干、我的主要应用程序文件、我的用户登录系统、我的布局系统、我的通知和聊天系统,所有这些都是我最初的大文件的一部分。

但是我还有许多其他模块,它们不属于初始捆绑包的一部分,它们是在这些模块之后加载的。

论坛、wiki、所见即所得、颜色选择器、拖放、日历和一些动画文件属于第二类。您需要对哪些是常用的和立即需要的,哪些是可以延迟的,做出合理的决定。

如果我立即包含所有内容,我可以超过一兆的 javascript,这将是疯狂的,并且会使初始启动速度慢得令人无法接受。

第二类在initSuccess事件从初始文件触发后开始下载。

但第二类比第一类更智能,因为它首先加载更重要的内容。例如,如果您正在查看 wiki,它将在加载颜色选择器之前加载 wiki。

于 2012-09-03T19:34:52.873 回答