Microsoft CDN for jQuery 还是 Google CDN?

187

使用哪个CDN来链接您的jQuery文件或其他JavaScript文件是否真的很重要? 其中一个可能比另一个更快吗? 哪些因素可能影响您决定使用哪个CDN? 我知道微软,雅虎和谷歌现在都有CDN。

16个回答

152

根据评论更新:

简短版本:这个不太重要,但可能取决于他们托管的内容。它们都托管不同的内容:谷歌不托管jQuery.Validate,Microsoft自2016年以来开始托管jQuery-UI!!,Microsoft提供了一些原本会通过ScriptResource.axd提供服务的脚本并提供更容易的集成(如与ASP.Net 4.0一起使用的ScriptManager)。

重要注意事项:如果您正在构建一个内部网络应用程序,请避免使用CDN方法。除非您的内部服务器非常过载,否则无论是谁托管,没有任何CDN可以比本地100mb/1GB以太网提供更好的性能。如果您为严格内部应用程序使用CDN,则会损害性能正确设置缓存到期标头并在仅限内部网络的情况下忽略CDN的存在。

被阻止的机会似乎相等,几乎为零。我曾经在合同中工作过,在这种情况下不成立,但这似乎是个例外。此外,自回答最初发布以来,周围的上下文发生了很大变化,Microsoft CDN取得了很大进展。

我们当前的项目同时使用了两个CDN,这对我们的解决方案最为适用。有几个因素影响了这个决定。使用旧浏览器的用户可能仍然会在每个域名上同时发起2个请求,正如HTTP规范所建议的那样。这对于任何运行较新版本并支持流水线处理(即所有现代浏览器)的人来说都不是问题,但基于另一个因素,我们也在消除此限制,至少在JavaScript方面是这样。

我们正在使用Google的CDN:

我们正在使用Microsoft的CDN:

我们的服务器:

  • Combined.js?v=2.2.0.6190(主版本.次版本.迭代.更改集)

由于我们的构建过程中涉及到合并和压缩所有自定义JavaScript代码,因此我们通过一个自定义脚本管理器来完成这个过程,该管理器根据构建情况包含发布或调试(未经压缩)版本的这些脚本。 由于Google不提供jQuery验证包的托管,这可能是一个缺点。 MVC在其2.0版本中包含/使用了它,因此您可以完全依赖Microsoft的CDN来满足所有需求,并且所有这些都可以通过ScriptManager自动完成,具体请参见该链接

唯一需要考虑的另一个因素是DNS时间,这会影响页面加载速度的成本。平均而言:仅因为它被使用更多(已经存在更长时间),所以ajax.googleapis.com返回DNS的时间很可能比ajax.microsoft.com更短,因为本地DNS服务器更有可能收到请求(这是第一个用户在区域内的惩罚)。 这只是一个非常微小的问题,只有在性能极其重要、以毫秒为单位衡量时才应该考虑。
(是的:我意识到这一点与我们使用两个CDN的做法相反,但在我们的情况下,DNS时间被JavaScript阻塞等待时间所掩盖)

最后,如果您还没有了解过它,那么最好的工具之一就是Firebug,以及其中的一些插件:Page SpeedYSlow。 如果您使用CDN但由于缺少缓存头而每次都请求图像,则会错过低垂的果实。 Firebug的网络面板可以快速为您提供页面加载时间的简要分析,而Page Speed/YSlow可以提供一些有用的建议。


26
更少被阻拦?我很想知道你是如何得出这个想法的。微软的网络并不归微软所有,而是属于 Akamai,他们比 Google 更早开始做负载均衡服务器,因此 "更好的容错系统" 也不成立。如果你要提出这样的主张,最好能提供一些证据。 - blowdart
16
有些公司(我曾在其中几家工作过)会将 *.microsoft.com 直接屏蔽,这是他们阻止 Windows 更新的一部分。这样做正确吗?不正确。但它确实发生了。例如:http://ajax.microsoft.com/... 它被归为 *.microsoft.com 的范畴而不是 www 异常情况下,当公司选择屏蔽除 www.microsoft.com 以外的一切时,它就会被屏蔽。我没有说这很可能发生,而是说相对可能,因为我从未见过谷歌被屏蔽,但我见过相反的情况。 - Nick Craver
5
我见过谷歌被屏蔽以阻止政府网站上的Gmail。但这种情况很少见,所以我不会试图将其作为这个案例的理由。 - blowdart
19
自从这篇文章写出来后,微软已经将jQuery-UI添加到他们的CDN上了:http://www.asp.net/ajaxlibrary/cdn.ashx#Using_jQuery_UI_from_the_CDN_10 - Will Dean
3
微软已将其CDN从ajax.microsoft.com迁移到ajax.aspnetcdn.com。因此,阻止Windows更新的一部分阻止微软CDN的机会已经不存在了。 - Sachin Joseph
显示剩余8条评论

89

作为一个以微软为中心的开发者,我强烈建议你使用 Google CDN 来加载 jQuery。

这是基于简单的统计学原理。那些考虑使用 MS CDN 来加载 jQuery 的人永远只会是少数派。有太多非微软开发者使用 jQuery 会选择使用 Google 的,而不会考虑使用 Microsoft 的。由于公共 CDN 的一个重要优势是改进的缓存机制, 将使用权分散在多个 CDN 上会降低这种优势的潜力。


7
如果我们一直这样想,只有更大的才能呼吸。不要仅仅因为它是Google并假设每个人都支持他们(毫无疑问,大多数人都支持他们),而是让最好的胜出,比较结果并选择他们。 - mamu
20
这不是假设。Alexa排名前两百万的网站中,使用谷歌CDN的站点数量超过了微软的100倍以上。就缓存流行度而言,唯一支持MS jQuery CDN的优点是微软的官网正在使用它,这使得它仅从这一个参考来源获得了很高的曝光率(但并不及数千个顶级网站引用谷歌CDN的曝光率)。 - Dave Ward
@DaveWard,您能否验证这是否仍然是事实,还是在过去几年中情况有所改变? - snumpy
3
@snumpy说:“据我所见,谷歌CDN的领先优势已经很大了。微软CDN没有任何问题。它很快,并且有一些谷歌CDN没有的文件。但是,跨站点缓存受网络范围覆盖的影响,而在这方面,谷歌CDN占据了优势。” - Dave Ward
因为我已经从jQuery CDN切换到微软的托管jQuery Mobile,所以我将其他jQuery下载文件从Google移动到它上面,以减少DNS往返次数。这只是另一个因素 :) - Rob Grant
然而,https://hostingcrown.com/jquery-cdn 将微软列为第一,具有最快的响应时间... - Dan Diplo

20

谷歌将通过自己的软件向您发送一个版本已压缩的jQuery,该版本比 MS 提供的标准压缩版本轻6kb。选择谷歌。


18

23
自此文章撰写以来,微软已将jQuery-UI添加到其CDN(内容分发网络)中:http://www.asp.net/ajaxlibrary/cdn.ashx#Using_jQuery_UI_from_the_CDN_10 - Will Dean

15
需要翻译的内容如下:

需要注意的是,因为ajax.microsoft.com是microsoft.com的子域名,所以请求会发送所有microsoft.com的cookies,导致获取文件的时间总体上更长。

此外,ajax.microsoft.com使用默认的IIS7压缩,这种方式不如其他Web服务器使用的标准压缩。

http://ajax.microsoft.com/ajax/jquery/jquery-1.4.4.min.js - 33.4K

http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js - 26.5K

另外,正如其他人已经提到的,谷歌的CDN(内容分发网络)更受欢迎,这大大增加了缓存文件的机会。

因此,我强烈建议使用谷歌。


3
这个反对意见在当时是有道理的,但现在不再适用,因为推荐的CDN域名已经变成了ajax.aspnetcdn.com。阻止*.microsoft.com的反对意见也不再适用了。 - Stephen Kennedy
这是真的。很高兴他们最终修复了它的一部分。现在我不再因为从MS CDN包含jQuery验证/循环插件而感到难过了。 - Alistair
由于切换到aspnetcdn,Cookie的事情也不再适用。 - Rob Grant

11

也许这并不重要,但您可以通过一些A/B测试来验证。将一半的流量发送到一个CDN,将另一半发送到另一个CDN,并设置一些分析来测量响应时间。我认为更重要的是能够轻松切换,以防其中一个出现严重的不可用问题。


7

我知道我有点晚了,但这里是我在生产中一直在使用的代码。我从来没有遇到过任何问题,但你的情况可能会有所不同。请确保在您自己的环境中进行测试。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>    
<script type="text/javascript">
    !window.jQuery && document.write('<script src="/scripts/jquery-1.4.2.min.js"><\/script>')
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
    !window.jQuery.ui && document.write('<script src="/scripts/jquery-ui-1.8.2.min.js"><\/script>')
</script> 

1
不幸的是,一些浏览器(如IE6)无法延迟处理在线脚本,直到src=脚本加载完成,因此这个方法不能按预期工作。但我们仍然希望它能够实现! - Walden Leverich
2
所以,你的IE6用户会体验到稍微慢一些的体验。如果你问我,这是一个很好的权衡。IE6正在下降...即使在企业内部网络中也是如此。 - Armstrongest

6

这两种方法中,哪一种可能更快?

我自己也很好奇,所以我设置了一个 jsbin 测试页面,使用以下各种方法,并将其通过 webpagetest.org 的可视化比较工具进行了测试:

  1. ajax.googleapis.com
  2. code.jquery.com
  3. ajax.aspnetcdn.com
  4. cdnjs.cloudflare.com

谁是最快的:code.jquery.com 在两个测试中都比其他网站快了0.1秒

谁是最慢的:ajax.aspnetcdn.com 在第一个测试中比其他网站慢了0.7秒,ajax.googleapis.com 在第二个测试中比其他网站慢了1秒

这是第一个测试(每个网站都测试了3次):

视频:http://www.webpagetest.org/video/view.php?id=121019_16c5e25eff2937f63cc1714ed1eac814794e62b3

报告: http://www.webpagetest.org/video/compare.php?tests=121019_D2_KF0,121019_9Q_KF1,121019_WW_KF2,121019_9K_KF3

这里是第二个测试(每个测试都有3个):

视频: http://www.webpagetest.org/video/view.php?id=121019_a7b351f706cad2c25664fee7ef349371f17c4e74

报告:http://www.webpagetest.org/video/compare.php?tests=121019_MP_KJN,121019_S6_KJP,121019_V9_KJQ,121019_VY_KJR


4
Pingdom所述:
当有人访问您的网站时,如果他们已经访问过另一个使用相同jQuery文件的CDN的网站,则该文件将被缓存,根本不需要下载。 这就是最快的速度。
这意味着使用最广泛的CDN将具有优势,这对于您的网站可能会产生回报。
关于性能的一些观察:
在北美和欧洲,Google的CDN始终是三者中最慢的。 在欧洲,Microsoft的CDN最快。

3
注意事项 - 如果您的网站启用了SSL,并且需要支持Android 2.1(或更早版本),那么Microsoft CDN上HTTPS版本的SSL证书将会导致这些版本的Android浏览器崩溃,参见此问题:http://code.google.com/p/android/issues/detail?id=5001。这并不是微软的“过错”,因为SSL证书在技术上是有效的,缺陷在于Android的SSL实现...,但它仍然会导致您的网站崩溃。
Google CDN上的SSL证书没有遇到此特定问题(与证书的“证书主题替代名称”相关)。
因此,要支持SSL + Android 2.1,请使用Google CDN。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接