投票结果:大型文件放在主要 CDN 上还是小型文件放在本地

Avatar of Chris Coyier
Chris Coyier 发布

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

我非常喜欢这个投票,因为结果非常接近。直到最近一周左右,才出现了一个明显的赢家。

Local wins with 55%

就像本网站历史上所有进行过的投票一样,有很多因素需要考虑,并且这个投票本身可能过于简单了。尽管如此,我认为仅仅让人们开始思考这个问题就是一个成功。从表面上看:20k 更小,但 CDN 更快且更有可能被缓存。

但还有更多内容……

  • CDN 可能是一个不同的域名,因此即使用户确实需要加载文件,它也不会计入单个域名的最大并发连接数。
  • 加载 JS 是一回事,但执行 JS 是另一回事。执行 200k 的 JS 总是比执行 20k 的 JS 慢。
  • Da_n 提醒我们 它们并不相互排斥。您可以尝试从 CDN 加载并回退到本地。
  • Evert 提醒我们,某些 IP 地址/范围在某些国家/地区可能会被阻止,因此我们从中提取的不同 IP 地址越多,某些资源被阻止并导致页面加载出现问题的可能性就越高。
  • 对于 Google CDN(此类用途中最流行的 CDN),只有当您链接到库的非常特定的版本(例如 1.8.14)时,缓存才会生效。如果您链接的版本不够具体(例如,1.8 会为您提供最新的 1.8.something 版本),则不会被缓存(或缓存时间不长)。
  • CDN 可以节省带宽,而这些成本可能非常可观(例如,本网站当前设计中 100k 的图像精灵在过去 30 天内使用了 50 多 GB 的带宽。这只是一个文件)。
  • 在本地,您可以选择将 20k 合并到其他 JS 文件中,并加载单个资源而不是多个资源。
  • Paul Irish 表示我们应该进行 A/B 测试以确定速度并选择最快的方法。
  • 移动设备是一个非常重要的考虑因素。移动浏览器缓存空间更小,并且(有时)带宽更低。
  • Kent Davidson 提醒我们,如果我们非常担心隐私,则可能无法使用 CDN,因为它会为每个请求文件的用户向 CDN 提供推荐字符串。
  • 在您自己的 CDN 上托管该小型自定义文件具有很大的优势。它可能没有机会被缓存,但具有其他优势。

Jayphen 在评论中提出了另一个很好的观点

像这样的帖子让我担心这类投票传播的错误信息……

如果大多数其他开发人员做错了,这并不意味着它是正确的。

仅仅因为“本地”赢得了这次投票,并不意味着它一直都是正确的答案(请参阅上面的注意事项)。

很快就会有新的投票。如果您对 CSS-Tricks 有投票的想法,请在下方留言。我想补充一些投票的想法。