【问题标题】:Request multiple S3 files into one request将多个 S3 文件请求到一个请求中
【发布时间】:2012-07-02 20:57:14
【问题描述】:

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

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

【问题讨论】:

  • S3 和大多数 CDN 尝试提供未更改的内容,如果您需要即时更改内容,即组合您需要从自己的服务器(即 EC2)提供它们的文件。但是,在这种情况下,您可能不需要,除了额外 HTML 的小开销之外,实际的 HTTP 传输可能会在一个连接中获取所有文件(至少对于相对现代的浏览器而言)。

标签: http amazon-s3 request cdn minify


【解决方案1】:

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

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

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

评论后编辑:

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

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

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

【讨论】:

  • 我明白你在说什么,但我真的想知道是否有特定的技术可以让服务器根据 URL 动态组合文件。
【解决方案2】:

这是您可以做到的一种方法(假设您只使用 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 中。我尚未对此进行测试,但我认为应该是您正在寻找的。​​p>

【讨论】:

  • 它从我上一条语句中删除了 [ body onload=" getJs() " ] 部分,因此您希望在加载时调用此函数。现在这假设 URL 中的参数与您发布的和您正在查看的页面的 URL 一样,但您可以根据需要自定义。
  • 当然你也可以在上面的 src 路径中添加 example.com url(我只是写出了文件名,没有example.com/cdn + 名称部分)
  • 谢谢迈克。这可行,但我实际上正在寻找一种方法来做到这一点,而无需为每个项目单独请求。
猜你喜欢
  • 2013-03-30
  • 2014-08-19
  • 1970-01-01
  • 2010-09-11
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 2020-09-28
相关资源
最近更新 更多