1

有没有办法在一个请求中从 S3(或任何 CDN)获取多个文件?

例如,我在 S3 上有四个文件:

  • example.com/cdn/one.js
  • example.com/cdn/two.js
  • example.com/cdn/three.js
  • example.com/cdn/four.js

我希望能够一次请求它们的任意组合。我目前必须分别包含它们:

<script src="example.com/cdn/one.js" />
<script src="example.com/cdn/two.js" />

但我想将它们作为一个请求包括在内:

example.com/cdn/code.js?one&two

我考虑过将所需的组合组合到单个文件中,但是组合太多了,不切实际。我也考虑过将它们全部合并到一个文件中,但这会大得离谱。

4

2 回答 2

1

首先:您的问题更像是一个 JS 问题,而不是与 S3 / CDN 相关的问题。并回答您的问题:您不能在一个 http 请求中“组合”它们。

如果你不想连接和缩小它们,你应该看看RequireJS,它可以处理你的脚本的加载——它是异步的,不会阻止浏览器渲染。

这是一篇关于异步加载的非常棒的文章:css-tricks.com - Thinking Async,它将为您提供更好的洞察力。

评论后编辑:

实际上,您可以使用 PHP 即时连接和缩小您的 JS 文件,但这会给您的服务器带来额外的负载,并且您将失去从 CDN 获得的好处……另一种方法是使用构建系统,它包含在投入生产之前的一切。

有关此主题的更多信息,请查看以下链接:

要在您的开发系统(如果它是 Mac)上进行即时小型化,您可能需要尝试CodeKit

于 2012-07-08T17:12:21.907 回答
0

这是您可以做到的一种方法(假设您只使用 one&two&three 并注意 file=one&file=two&file=3):

function getJs() {
  var url = window.location.toString();
  var query = url.split("?");
  var params = query.split("&");

  // iterate through array of params and write JS
  for (i=0; i<params.length; i++) {
    var name = params[i] + ".js";
    document.write("<script defer language='javascript' type='text/javascript' src='" + name + "'><\/sc" + "ript>");
  }
}

这应该在页面加载后加载。然后在你的 HTML 中。我没有测试过这个,但我认为应该是你要找的。

于 2012-07-13T14:51:19.307 回答