为什么我应该将Google的CDN用于jQuery?


169

这对于某些人可能是显而易见的,但是我一直在想:为什么我应该依靠Google的服务器来为我的网站托管jQuery?

仅仅是因为这样加载速度更快吗?



2
没有人提到Google对其JS文件进行热链接的政策(鉴于通常不赞成使用热链接),因此这里是Google提到可以的网址以及有关其托管库的更多信息:code.google.com/apis/ajaxlibs/ documentation / index.html
Loftx 2010年


1
访问另一个站点时,许多用户已经从Google或Microsoft下载了jQuery。结果,当他们访问您的网站时,将从缓存中加载该文件,从而缩短了加载时间
AminM

您不应该使用Microsoft或Google。使用MaxCDN。更可能获得缓存命中,在这里是最重要的事情blog.jquery.com/2014/01/14/...
0fnt

Answers:


393

这是因为:

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

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

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

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

  5. 这样可以确保用户在地理位置上能获得接近的响应。
    (Google在世界范围内拥有服务器,从而进一步减少了延迟。)

  6. (可选)它们将自动使您的脚本保持最新。
    (如果您想“坐下来,可以随时使用他们提供的任何脚本的最新版本。这些脚本可以解决安全漏洞,但通常只会破坏您的工作。”)

10
我喜欢您不断提出更多理由的方式。仅为此+1。
Matchu'2

6. Google的服务器可能比您的服务器更快!我不确定第3点是否真的相关,因为任何人都可以像Google一样缩小规模。+1是个不错的答案:)
Paul Creasey'2

1
我觉得#3可能与gzip等有关,因为jQuery已经给出了缩小版本。
Matchu

2
上帝,每个人都在攻击我,我只是发送了我的想法,并被接受了,大声笑
Farshad

1
@farshad:不攻击您,攻击被接受的答案,该答案不及下一个答案。这就是社区问答的工作方式。下次尝试更加专业地格式化答案,并将对问题的批评仅限于有用的,建设性的类型。
乔尔

58

有几种方案时,你可能希望使用jQuery来自谷歌的CDN:

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

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

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

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

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


35
仅供参考,您可以使用Google的服务器来提供托管JavaScript库的SSL版本。 ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js可以使用。
亚伦·瓦格纳

很高兴知道,亚伦。谢谢。
Lance Fisher

3
+1(提及微软)。谷歌获取方式 IMO太多的功劳。
是Barry

7
仅供参考:计划相对超链接,例如 src="//ajax.googleapis.com/...",起作用。
John Gietzen 2013年

3
并考虑cndjs
Bryce

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)。”


3
HTTP2和SPDY不再适用。今天,您可以将所有外部资源托管在CDN之类的CDNjs.com之类的文件中,并且将使用同一请求下载所有文件。那基本上和连接相同。
Ricardo Polo Jaramillo

13

最大的好处就是缓存。从理论上讲,如果访问者访问了一个正在加载其JavaScript库的网站,例如从Google CDN中搜索jQuery,那么当他们访问您的网站时,该库已经在该用户的浏览器缓存中,而不必再次下载。从理论上讲,这听起来不错。

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


这个答案被严重低估了。它为上面的“ pro”接受的答案提供了同样有效的“缺点”。
Thomas Wana 2013年

@ user239558如果研究的作者实际上使用了CDN,则链接不会消失;-)错误是:[function.require]:无法打开流:/ homepages / 41 / d222999437中没有此类文件或目录/htdocs/wp-content/themes/prose/functions.php
jplandrain,2014年

这篇文章没有经过深思熟虑。它说,最不常见的jQuery库由Google CDN在所有页面的0.5%上提供。在一般的浏览会话中,我访问了大量页面,尤其是那些指向网站的小链接,例如托管该页面的链接。或博客网站。一周之后,我每天轻松地访问30个独特的网站,而没有缓存的机会非常渺茫。尽管可能不会为所有用户缓存该缓存,但是广泛使用Internet的人们几乎总是对其进行缓存,因为他们总共访问了超过1个唯一域。
Aidiakapi 2014年

8

许多人没有想到的一个不让Google托管您的jQuery的主要原因是,如果您在中国,它将无法下载。它与Google CDN托管的许多其他脚本,字体等一起被阻止。如果需要吸引中国观众,最好始终使用托管在自己服务器上的后备服务器。 Google APIS在中国被封锁


我不同意@tmthydvnprt。这个问题是有根据的,所以这就是大多数错误的开始所在,但这确实回答了这个问题。
再见StackExchange

1
我来这里也是一样。如果用户在中国,则来自Google的大部分内容都将被强大的防火墙阻止。但是,由于在中国许多人都在使用VPN服务,因此这可能不是问题,而且您可能也不想针对中国市场。
贾斯汀

0

这里对“为什么应该...”和“为什么不应该...”给出了一些好的答案。

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.