请求将多个S3文件合并为一个请求

时间:2012-07-02 20:57:15

标签: http amazon-s3 request cdn minify

有没有办法在一个请求中从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

我考虑过将所需的组合合并到单个文件中,但是会有太多的组合才能实现。我还考虑将所有这些文件合并到一个文件中,但这样会非常大。

2 个答案:

答案 0 :(得分:1)

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

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

这是一篇非常好的关于异步加载的文章:css-tricks.com - Thinking Async,可以让您更好地了解。

评论后编辑:

实际上,您可以使用PHP来连接&amp;动态缩小你的JS文件,但这会给你的服务器带来额外的负担,你将失去从CDN中获得的好处......另一种方法是使用构建系统,它在生产之前将所有内容打包。

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

要在您的开发系统上进行快速微操作(如果它是Mac),您可能需要尝试CodeKit

答案 1 :(得分:0)

这是你可以做到的一种方法(假设你只使用一个&amp;两个&amp;三个并且注意文件=一个&amp; file =两个&amp; 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中或许。我没有测试过这个,但应该是我想要的东西。