如何最大化从 S3 进行并行下载

如何最大化从 S3 进行并行下载

我在单个页面上从 Amazon S3 加载了大量图像,有时加载所有图像需要相当长的时间。我听说将图像拆分为不同的子域将有助于并行下载,但实际的实现方式是什么?虽然拆分静态、图像等子域很容易;但我是否应该创建 10 个子域(图像 1、图像 2...)来加载 100 幅图像?或者有一些巧妙的方法可以做到吗?

(顺便说一下,我正在考虑使用 memcache 来缓存 S3images;我不确定是否可行。如有任何进一步的评论,我将不胜感激。非常感谢!

答案1

我将尝试按要点对答案进行排序,这肯定可以对您的状态有所帮助:

  • 由于我们讨论的是静态内容,我建议使用 Nginx 作为反向代理来提供静态内容。下载缓慢可能是因为您达到了 Apache 的并发连接限制。
  • 使用不同的或多个子域名可能有助于扩大浏览器本身的范围,但另一方面可能会影响您页面的整体全球速度和排名,因为您的子域名会增加更多的 DNS 解析请求,这不是一件好事。
  • 看看类似的东西:Cloudflare.com,他们有一些免费的非常好的服务可以从中受益。
  • 利用浏览器缓存标头,如果您的内容没有发生很大变化,这可能会有很大帮助。
  • 尽量保持你的静态脚本(例如 CSS、JS)始终最小化。
  • 尝试使用一些服务,例如:http://tools.pingdom.com/fpt/http://gtmetrix.com/因为它们可以为您提供有关页面加载性能的非常有价值的详细信息以及获得更好结果的宝贵提示。
  • 尽量减少页面生成的请求(例如将不同风格或布局的图片组合在较少的图片中并通过 CSS 控制它们)

嗯...这就是我目前所想的。

答案2

您能获得的最大加速是转向 CloudFront(Amazon 的 CDN),它可以位于 S3 前面,为用户带来显著更快的体验。

完成此操作后,如果您愿意,可以创建多个 CloudFront 子域,它们都指向同一个 S3 存储桶,然后您可以将其随机分配给图像,以便它们并行加载(本质上是您的 image1、image2 的想法)。

答案3

您将图像拆分到多个 CNAME 上的想法很好,并且 Google 的最佳实践可以最好地描述这一点:https://developers.google.com/speed/docs/best-practices/rtt#ParallelizeDownloads

相关内容