65.9K
CodeProject 正在变化。 阅读更多。
Home

CDN 的神话

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (7投票s)

2013年11月12日

CPOL

5分钟阅读

viewsIcon

21759

为 JS 框架使用 CDN 真的值得吗?

引言

我最近在 HeadJS 的 Github 页面上收到一个问题,有人问是否可以从 CDN 链接 HeadJS 并设置本地回退。

我的第一反应是,当然可以,这和 jQuery 一样,毕竟使用 CDN 之类的都是好事,对吧?至少这几年大家都在这么宣传。

然后,大约 10 分钟后,当这些信息终于沉淀下来,我开始回想过去使用不同库和 CDN 的各种经历,我开始质疑我的回答……

我现在对这个问题的答案是:使用 CDN 来托管 JS 框架真的值得吗?

也许,但很可能不值得!

重要提示:如果您将网站的静态内容托管在 CDN 上,那么您无需担心。此解释仅适用于链接到各种 CDN 上的 JS 库,例如 jQuery,我将以此为例。

CDN 的理念是,网站 **A** 引用了它上面的一个库,然后如果您访问网站 **B**,而网站 **B** 也引用了它,那么用户就会命中缓存,他将不必再次下载该资源。您节省了带宽,用户体验也会更快。皆大欢喜!

对吧?也许吧。

所以,正如其理念所阐述的,当尽可能多的网站链接到同一个资源,并且用户在从网站 A 到 B 再到 C 等等之间切换时,能够命中这些相同的资源,CDN 就很有用。

如果我们查看 W3techs,他们说 jQuery 的市场份额为 56.7%,其次是 Mootools,市场份额为 5.1%。

如果我们查看 BuiltWith,我们会得到类似的结果,但会细分到流行的网站范围。

来自 BuiltWith 的另一张图表显示了这个布局。

那么,这告诉我们什么?

  1. 用户会遇到 2 个网站中有 1 个使用 jQuery(这非常好!)。
  2. 直接忽略其他库!

好吧,但我们应该使用哪个 CDN……如果使用的话?

* jQuery 的 CDN 现在支持 HTTPS 了。

从上面的图表来看,我们可以假设官方的 jQuery CDN 是最合适的。我还会在这里加分,因为它是 jQuery 网站上的默认链接,这增加了它的覆盖范围。

话虽如此,许多人也是 Google CDN 的粉丝,还有一些是 Microsoft 的……这没问题,但。

如上所述,jQuery 几乎被一半的网站使用,但使用的是哪个版本,是托管在 CDN 上还是本地,如果是 CDN,又是哪个 CDN……

让我们来算算账。

以下的计算是完全理论化的,没有实际的世界测量……但应该能说明一点问题。

在 100% 的网络中。

50% 使用 jQuery。

假设其中 50% 的人中,有 25% 实际上使用了 CDN。

这样,就有 12.5% 的所有网站使用 jQuery 和 CDN。

……现在有多少个不同版本的 jQuery?

查看 Google CDN,我们看到了上图。如果我们只计算 1.x 系列,有 30 个版本。哎哟!

您知道有多少网站actually 使用最新、最好的版本并且始终保持代码更新吗?……我很少知道 :-(

所以,我们假设大多数网站使用的是 10 个潜在版本中的 1 个,而不是全部 30 个。

我们的 12.5% 现在只剩下 1.2% 了……

差点忘了,有很多 CDN,虽然最受欢迎的可能是:jQuery CDN(至少对于 jQuery 而言),Google,Microsoft。

既然我们还在谈论 jQuery,我们就说 jQuery 的 CDN 占有 70% 的市场份额,其余的平均分配。这现在给了 0.84%,以及 0.12%。

所以……通过 CDN 使用 jQuery,取决于您使用哪个 CDN,您有 119 分之一或 833 分之一的机会用户拥有缓存副本。

还有一些其他要点需要考虑。

如果 CDN 宕机或响应缓慢,它将导致您的整个网站在超时期间卡顿(回退脚本至少需要 15 秒才能启动……您正在使用一个,对吧?)。

当然,大多数 CDN 都声称有 99.9% 的正常运行时间 SLA,但就我个人而言,我曾亲身经历过 jQuery、Google 或 Microsoft 的 CDN 并不总是那么好。

如果您主要为离您数据中心近(半径 1000 公里内)的用户提供服务,那么通过您自己的数据中心访问的速度可能比通过 CDN 略快。

更新:我收到了一些关于用户浏览行为和缓存的反馈……在一个完美的世界里,这会如预期般运作,但在现实中,统计数据如下:

  • 约 30% 的用户拥有完整的缓存(上限为 320 MB)。
  • 对于拥有完整缓存的用户,填满缓存的中位数时间为 4 小时的活跃浏览(20 小时的时钟时间)。
  • 7% 的用户每周至少清除一次缓存。
  • 19% 的用户每周至少经历一次“致命缓存损坏”,因此清除缓存。

来源:Cache them if you can: S. Souders

结论

  • 如果您想从 CDN 链接到某个 JS 框架……如果是 jQuery,当然可以。
    • 您不会获得太多收益,但也不会损失太多。
  • 如果不是 jQuery……您就是在浪费时间。
  • 不要为了简单的缓存目的而使用 CDN。

但是,如果您有许多国际用户,那么 CDN 可能会更快(这与缓存无关,而是将您的内容拉近到您的受众!)。在这种情况下,您也应该开始考虑(如果您还没有考虑过的话)将所有静态内容(js、css、字体、图片)移到真正的 CDN,以加快您的网站速度。

© . All rights reserved.