【发布时间】:2013-06-11 02:22:57
【问题描述】:
我在一个网站上有多个使用 RequireJS 的页面,并且大多数页面都有独特的功能。它们都共享许多通用模块(jQuery、Backbone 等);它们也都有自己独特的模块。我想知道使用r.js 优化此代码的最佳方法是什么。我看到 RequireJS 和 Almond 的文档和示例的不同部分提出了许多替代方案——所以我想出了以下我看到的可能性列表,我在问哪个是最推荐的(或者是否有另一种更好的方法) :
- 为整个站点优化单个 JS 文件,使用 Almond,它会加载一次然后保持缓存。这种最简单方法的缺点是我将加载到用户不需要该页面的每个页面代码(即特定于其他页面的模块)。对于每个页面,加载的 JS 都会比它需要要大。
- 为每个页面优化一个 JS 文件,其中包括通用模块和页面特定模块。这样我就可以在每个页面的文件中包含 Almond,并且在每个页面上只加载一个 JS 文件——这将比整个站点的单个 JS 文件要小得多。不过,我看到的缺点是公共模块不会缓存在浏览器中,对吧?对于用户访问的每个页面,她都必须重新下载大量 jQuery、Backbone 等(公共模块),因为这些库将构成每个唯一单页 JS 文件的大部分。 (这似乎是RequireJS multipage example 的方法,只是示例没有使用杏仁。)
-
为常用模块优化一个 JS 文件,然后为每个特定页面优化另一个。这样,用户将缓存公共模块的文件,并且在页面之间浏览时,只需要加载一个特定于页面的小 JS 文件。在这个选项中,我看到了两种完成它的方法,包括 RequireJS 功能:
一种。在所有页面上的公共模块之前加载文件 require.js,使用
data-main语法或普通的<script>标签 - 根本不使用 Almond。这意味着每个页面将包含三个 JS 文件:require.js、公共模块和页面特定模块。 湾。 this gist 似乎在建议一种将 Almond 插入每个优化文件的方法 ---- 这样我就不必加载 require.js,而是将 Almond 包含在我的公共模块和特定于页面的模块中。是对的吗?这比预先加载 require.js 更有效吗?
感谢您提供的有关执行此操作的最佳方法的任何建议。
【问题讨论】:
-
请注意,8 年后选项 3 已成为事实上的行业标准 :)
标签: optimization compression requirejs r.js almond