【问题标题】:Bundling, RequireJS, and CDNs - Do they cancel each other out?捆绑、RequireJS 和 CDN - 它们会相互抵消吗?
【发布时间】:2015-07-15 10:58:23
【问题描述】:

我知道你们在想什么,can't he just use all 3?是的,我可以,但我的问题是:它们不会相互抵消吗?

tl;dr

  1. 捆绑会使 RequireJS 过时吗?
  2. 捆绑会使 CDN 过时吗?
  3. 如果我必须在捆绑或 RequireJS+CDN 之间做出选择,我如何确定使用哪个? CDN 常见文件和捆绑不常见文件是最佳实践吗? SPA 文件呢?

长版

例如,我们捆绑文件以减少 HTTP 请求。而使用 RequireJS 以便可以根据需要动态和异步加载文件。

那么如果我们将所有的 JS 文件打包成 1 个,还需要 RequireJS 吗?

另外,我们使用 CDN,所以浏览器可以访问缓存版本,所以如果用户访问 5 个网站,所有这些网站都使用流行的 jQuery CDN - 即http://cdn.com/jquery.min.js - 浏览器实际上不需要发出任何 HTTP 请求最后 4 个站点上的此文件,这比捆绑该文件要快得多。如果这些站点改为从 CDN 访问一个唯一的捆绑文件 - 特定于他们的需求 - 缓存“命中”的几率会变得低得多。而且,由于“命中”的几率较低,因此即使是使用该网站的人也不太可能缓存该文件。

那么捆绑文件甚至放在 CDN 上真的有帮助吗?

【问题讨论】:

    标签: requirejs cdn bundling-and-minification


    【解决方案1】:

    而使用 RequireJS 以便文件可以根据需要动态和异步加载。

    许多开发人员使用 RequireJS 以一种简洁的方式来分离关注点,无需动态加载模块。我有一些使用 RequireJS 开发的应用程序和库。其中之一是一个完全不使用动态加载功能并且不会从使用它们中受益的库。在这个库的几乎所有用例场景中,它应该作为单个包加载,而不是作为模块的集合,一个接一个地加载。

    这让我想到另一件事:决定不是捆绑RequireJS之间。您可以使用r.js(RequireJS 的优化器)将您的 RequireJS 模块捆绑到一个文件中以用于生产。如果您愿意,这可能包括第 3 方模块。或者您可以将它们排除在外,由 CDN 提供服务。可以将应用程序优化为单个捆绑包或一系列捆绑包。与任何其他优化问题一样,应该做什么取决于所考虑的特定应用程序的架构。

    您的问题的其余部分完全基于意见。我已经看到统计数据支持的详细论点,即您应该使用 CDN,您不应该使用 CDN,以及介于两者之间的所有内容。这是一个优化问题,同样取决于所考虑的应用程序的具体情况。

    【讨论】:

      【解决方案2】:

      那么如果我们将所有的 JS 文件打包成 1 个,还需要 RequireJS 吗?

      并非全部。您可能对almond 感兴趣。

      RequireJS 的替代 AMD 加载程序。它提供了最小的 AMD API 占用空间,包括加载程序插件支持。仅对内置/捆绑的 AMD 模块有用,不进行动态加载。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-01
        • 2013-12-29
        • 2017-09-20
        • 2019-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多