171

这对某些人来说可能很明显,但我一直在想:我为什么要依赖Google 的服务器来为我的网站托管 jQuery?

仅仅是因为它以这种方式加载更快吗?

4

7 回答 7

397

这是因为:

  1. 它增加了可用的并行度。
    (大多数浏览器一次只能从任何给定站点下载 3 或 4 个文件。)

  2. 它增加了缓存命中的机会。
    (随着越来越多的网站遵循这种做法,越来越多的用户已经准备好文件。)

  3. 它确保有效载荷尽可能小。
    (Google 可以以多种格式(如 GZIP 或 DEFLATE)预压缩文件。这使得下载时间非常短,因为它是超级压缩的,并且不是动态压缩的。)

  4. 它减少了服务器使用的带宽量。
    (谷歌基本上是提供免费带宽。)

  5. 它确保用户将获得地理上接近的响应。
    (谷歌在世界各地都有服务器,进一步降低了延迟。)

  6. (可选)它们会自动使您的脚本保持最新。
    (如果你喜欢“坐以待毙”,你总是可以使用他们提供的任何脚本的最新版本。这些可以修复安全漏洞,但通常只会破坏你的东西。)
于 2010-02-01T22:03:30.900 回答
59

在几种情况下,您可能不想使用 Google CDN 中的 jQuery:

  1. 当您构建 Web 服务器与客户端托管在同一网络上的 Intranet 应用程序时。 如果您使用 Google 的 CDN jQuery,您将调用 Internet 而不是本地网络上的网络服务器。这会增加您组织的带宽,并且速度会变慢。

  2. 当您想离线运行您的应用程序时。(与第一个问题非常相关)如果您需要在开发环境中工作(例如使用Bower管理),您可能需要能够在没有任何互联网连接的情况下使您的应用程序工作(即:在火车上 :)

  3. 当你需要定制它时。例如,如果您使用Grunt构建库以便仅使用某些模块或设置AMD 名称

  4. 当您通过 SSL 提供需要 jQuery 的页面时。 您应该通过 SSL 提供 JavaScript 以及您的页面以避免安全问题和警告。

此外,Microsoft在其 CDN 上托管 jQuery。这是与使用 Google 托管的 jQuery 相媲美的另一种选择。

于 2010-02-01T22:50:26.097 回答
29

TJ VanToll的这项研究让我相信,最好将 jQuery 与其他脚本连接起来,而不是从 CDN 加载它。

原因是在移动设备上获取 jQuery 所涉及的延迟:

“2012 年,美国移动网络上的平均 RTT 时间为 344 毫秒。这 344 毫秒不仅适用于每个 HTTP 请求(现在平均网页产生 93 个请求),还适用于每个 DNS 查找和 TCP 连接......虽然平均 RTT 正在提高,但只有很小的额外收益,因为当前的网络在物理学规定的理论极限的一小部分范围内。”

他还引用了Steve Souders 的这篇文章,说明了为什么您实际上不太可能从使用 CDN 中获得缓存优势:

“由于 CDN 提供程序、jQuery 版本和协议使用(http 与 https)的碎片化,获得 CDN 缓存命中的机会非常低 - 从外部域下载有可能执行的不是一个,而是三个往返(DNS 查找、TCP 连接和 HTTP GET)。”

于 2014-03-12T16:00:08.463 回答
14

最大的好处是缓存。理论上,如果访问者访问了一个正在加载其 JavaScript 库的站点,例如来自 Google CDN 的 jQuery,那么当他们访问您的网站时,该库已经在该用户的浏览器缓存中,无需再次下载. 这在理论上听起来很棒。

在这里和其他地方分享的好处都是理论上的。刚刚对使用 CDN 以及它是否提供预期的性能优势进行了深入分析。 http://www.root777.com/appdev/does-using-google-libraries-api-cdn-give-you-performance-benefits

于 2012-03-21T15:25:34.480 回答
8

不让谷歌托管你的 jQuery 的一个主要原因是,如果你在中国,它不会下载。它与由 Google CDN 托管的许多其他脚本、字体等一起被阻止。如果您需要接触中国观众,您最好始终使用托管在您自己的服务器上的后备。 谷歌 APIS 在中国被封锁

于 2016-07-31T13:18:37.703 回答
0

这里有一些很好的回答“为什么你应该......”和“为什么你不应该......”

如果您确实想从 CDN 加载 jQuery,我只是想添加一个替代 Google 的列表。

但总而言之,您基本上是在提高您的整体网站/应用程序性能。

于 2018-01-10T18:41:47.780 回答
0

使用 Service Worker 签署 CDN,您可以在客户端生命周期内下载一次 CDN,而不是每次更新代码时。

于 2018-11-16T13:19:40.880 回答