用于jQuery或Google CDN的Microsoft CDN?[关闭]


187

您实际上使用哪个CDN链接到您的jquery文件或任何javascript文件并不重要。一个可能比另一个更快吗?您决定在哪个CDN中使用哪些其他因素?我知道Microsoft,Yahoo和Google现在都具有CDN。

Answers:


151

根据评论更新:

简短版:没什么关系,但可能取决于他们托管的内容。他们都拥有不同的东西:谷歌没有托管jQuery.Validate,微软没有托管jQuery-UI,自2016年以来就已经托管了!!,微软提供了可以通过ScriptResource.axd更简单的集成方式提供的脚本(例如ScriptManager与ASP。网络4.0)。

重要说明: 如果要构建Intranet应用程序,请远离CDN方法。托管它的用户无关紧要,除非您内部使用的服务器负载非常高,否则CDN不会为您提供比本地100mb / 1GB以太网更高的性能。如果将CDN用于严格的内部应用程序,则会损害性能正确设置您的缓存过期标头,并忽略仅Intranet方案中存在的CDN。

被阻止的机会似乎几乎相等,几乎为零。我曾从事过并非如此的合同工作,但这似乎是一个例外。此外,自从最初发布此答案以来,其周围的上下文已发生了很大变化,Microsoft CDN取得了很大进步。

我目前正在进行的项目同时使用两个CDN,这对我们的解决方案最有效。有几个因素在起作用。使用旧版浏览器的用户仍然可能按照HTTP规范的建议在每个域中同时发出2个请求。对于任何运行支持流水线的新东西(每个当前的浏览器)的人来说,这都不是问题,但是基于另一个因素,我们也要消除这一限制,至少就JavaScript而言。

我们用于以下方面的Google CDN:

我们用于以下方面的Microsoft CDN:

我们的服务器:

  • Combined.js?v = 2.2.0.6190(Major.Minor.Iteration.Changeset)

由于构建过程的一部分是合并和最小化所有自定义javascript,因此我们通过自定义脚本管理器执行此操作,该脚本管理器根据构建情况包括这些脚本的发行或调试(非最小化)版本。由于Google未托管jQuery验证程序包,因此这可能是不利的一面。MVC在其2.0版本中包含/使用了它,因此您可以完全依靠Microsoft的CDN来满足您的所有需求,并且所有这些都可以通过ScriptManager自动实现

唯一需要考虑的其他参数是DNS时间,这在页面加载速度方面是有代价的。 平均:仅因为使用了更多时间(时间较长)ajax.googleapis.com才比DNS更快返回DNS ajax.microsoft.com,仅是因为本地DNS服务器更有可能收到请求(这是该区域中的第一个用户) 。这是一件非常小的事情,只有在性能极其重要(低至毫秒)的情况下才应考虑。
(是的:我意识到这一点与我同时使用两个CDN都是相反的,但是在我们的案例中,DNS时间远远超过了发生的javascript /阻止的等待时间)

最后,如果您没有看过它,那么Firebug是其中最好的工具,还有一些它的插件:Page SpeedYSlow。如果您使用CDN,但是由于没有缓存头,则页面每次都在请求图像,那么您将错过低挂的果实。Firebug的“网络”面板可以快速为您提供页面加载时间的快速细分,而页面速度/ YSlow可以提供一些很好的建议来帮助您。


26
不太可能被阻止?我很想知道你是怎么想到这个主意的。无论如何,MS网络并不是MS的网络,而是akamai的人,他们使用负载均衡服务器的时间比Google长得多,这也使“更好的过渡系统”毫无意义。的确,如果您要提出这样的主张,那么一些证据将是很好的。
09年

16
一些公司(我已经为其中的一些公司工作)直接阻止* .microsoft.com作为阻止Windows更新的一部分。这样对吗?不,会发生吗?是。示例:ajax.microsoft.com / ...它属于* .microsoft.com阻止,而不属于www例外,当公司选择阻止除www.microsoft.com之外的任何内容时,它将被阻止。我没有说这很有可能,我说的可能性更大,因为我从未见过google被阻止,但见过相反的情况。
尼克·克拉弗

5
而且我已经看到Google被阻止在政府网站停止gmail。但是由于它非常罕见,因此在这种情况下,我几乎不会尝试将其用作理由。
09年

19
自编写此书
Will Dean 2010年

3
@Nick微软已将其CDN从ajax.microsoft.com移至ajax.aspnetcdn.com。因此,作为阻止Windows Update的一部分,不可能阻止Microsoft的CDN。
萨钦·约瑟夫

88

您绝对应该使用jQuery的Google CDN(这是一个以Microsoft为中心的开发人员)。

这是简单的统计信息。那些会考虑将MS CDN用于jQuery的人永远是少数。使用jQuery的非MS开发人员太多了,他们会使用Google的并且不会考虑使用Microsoft的。由于改进公共缓存是使用公共CDN的一项重大成就,因此在多个CDN之间分配使用量会减少这种利益的潜力。


7
如果我们一直这样想,那么只有更大的人才会喘口气。不要只使用google,因为它是google,并假设每个人都与他们在一起(无疑大多数人都与他们在一起)。但是让最好的胜利,比较结果并与他们同行。
mamu 2010年

20
这不是一个假设。使用Google的CDN的Alexa网站排名前20万,超过了微软的100:1。就缓存的流行程度而言,支持MS jQuery CDN的唯一要点是Microsoft.com使用它,这使它仅从一个引用中就获得了很多展示机会(但与引用Google的数千个顶级网站相比却少了很多) )。
戴夫·沃德

@DaveWard,您是否可以验证情况仍然如此,还是在过去几年中已将表翻了几番?
卑鄙的

3
@snumpy:Google CDN的领先优势已超出我所见。Microsoft CDN 没有。它速度很快,并且有一些Google文件没有的文件。但是,跨站点缓存的优势取决于整个网络的覆盖范围,而Google在这方面占据了所有其他站点的主导地位。
Dave Ward

因为我已经从jQuery CDN切换到Microeoft,用于托管jQuery Mobile,所以我将其他jQuery下载从Google移到了它,以减少DNS往返次数。另一个因素是:)
罗布·格兰特


18

要考虑的一件事是,两家公司都提供略有不同的“额外”库:

根据您的需求,这可能很重要。


23
自撰写以来,MS已将jQuery-UI添加到其CDN:asp.net/ajaxlibrary/cdn.ashx#Using_jQuery_UI_from_the_CDN_10
Will Dean 2010年

15

还应注意,由于ajax.microsoft.com是microsoft.com的子域,因此请求将发送所有microsoft.com cookie,从而增加了取回文件的总时间。

另外,ajax.microsoft.com使用的是默认的IIS7压缩,它不如其他Web服务器使用的标准压缩。

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

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

另外,正如其他人提到的,google CDN更为流行,这大大增加了文件被缓存的机会。

因此,我强烈建议您使用Google。


3
当时这是一个很好的反对意见,但由于建议的CDN域名现在为ajax.aspnetcdn.com,因此不再适用。* .microsoft.com异议的阻止也不再适用。
Stephen Kennedy

这是真的。很高兴他们终于修复了这部分。现在,我对包含来自ms cdn的jquery validate / cycle插件感到很满意。
Alistair

由于切换到aspnetcdn,Cookie也不再适用。
罗伯·格兰特

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正在下降……甚至在企业内部网中也是如此。
阿姆斯特朗

7

关于统计信息:jquery.com从Google加载jQuery。Twitter,Stackoverflow等许多其他公司也是如此。因此,您的网站用户很有可能已经缓存了它= 根本没有下载

忘记验证器,带宽和速度,因为这是主要优点。否则,任何其他CDN选项都将在基本上相同的级别上执行。


1
是的,但是Twitter(根据Dave Ward的encosia.com/2010/09/15/…)使用jQuery 1.3.0(在“旧” Twitter中),因此它们实际上并不重要...
veggerby

好吧,我前一段时间做的网站仍然使用jQuery 1.3.0,例如(旧的)Twitter。总是很重要。
achairapart 2010年

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所述

当某人访问您的站点时,如果他们已经访问了在同一CDN上使用相同jQuery文件的另一个站点,则该文件将已被缓存,根本不需要下载。它不能比这更快。

这就是说,使用最广泛的CDN的优势很大,可以为您的网站带来回报。

关于性能的一些观察:在北美和欧洲,Google的CDN一直是这三个中最慢的。在欧洲,Microsoft的CDN是最快的。


3

我认为这取决于您的目标受众在哪里。您可以使用alertra.com检查来自世界各地的CDN速度。


这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方发表评论。
Fiona-myaccessible.website 2014年

1
对菲奥娜来说,这是我对这个问题的答案。问题是“是否重要”,我的回答是“取决于目标受众的位置”,我提供了一个站点来测试来自世界各地的速度,以让他决定使用哪个CDN。这不是评论,而是答案。
沉默的

3

另一个注意事项-如果您的站点是SSL,并且您需要支持Android 2.1(或更早版本),则Microsoft CDN的HTTPS版本上的SSL证书将使Android浏览器的这些版本崩溃,具体请参见此问题:http:// code .google.com / p / android / issues / detail?id = 5001。这不是Microsoft的“故障”,因为SSL证书在技术上是有效的,并且缺陷存在于Android的SSL实施中……但是,它仍然会使您的网站崩溃。

Google的CDN上的SSL证书不属于该特定问题(与证书的“证书主题替代名称”有关)。

因此,要获得SSL + Android 2.1支持,请使用Google CDN。


2

我的答案与其他答案略有不同,如果您需要jquery验证程序,那么我将与Microsoft一起使用,如果您使用jquery,几乎每个人都需要它。

Microsoft CDN http连接保持活动状态,这在您请求多个项目时非常重要。

因此,如果您需要jquery验证,那么请使用Microsoft CDN,即使您需要jquery ui,也请使用microsoft,因为google不会保持活动状态,因此每个请求都是独立的。所以以这种方式混合是加号。如果您仅将Microsoft用于验证程序,则针对每个请求与Google服务器进行单独连接。



1

还要考虑使用Google CDN时,有时人们会打错字,例如ajax.googelapis.com。这可能会造成真正讨厌的xss(跨站点脚本)攻击。我实际上通过注册googlapis.com错字测试了这一点,很快发现自己正在处理对javascript,地图,css等的请求。

我通过电子邮件发送给Google,并要求他们注册类似的CDN错字网址,但没有收到回复。这可能是不依赖CDN的真正原因,因为有潜在危险的攻击者在等待输入错误,并且可以轻松地使用xss有效负载为jquery等提供服务。

谢谢


1
话题可能有点偏离,但有趣的是。
2012年

1

根据应用程序针对的行业,您可能不想使用其他组织管理的CDN。它通常会引起有关合规性,隐私和机密性的问题。

例如,当您在安全的应用程序中包含Google Analytics(分析)时,浏览器仍会将当前URL发送为“引荐来源”标头。任何标识符(例如会话ID或秘密令牌)都可能出现在其日志中。例如,如果客户端IP为192.0.2.5,则引用https://healthsystem.example/condition/impotence,那么可以推断出相当私有的信息。

其他情况包括后果信息,例如帐号,社会保险号或URL中的会话信息。这类数据绝不能在URL中,因为它可以在应用程序外部使用。

尽管您可能信任Google,Microsoft或Yahoo,但您的用户却可能不信任。

对于金融,法律和医疗保健等行业,您可能希望在可以签署BAA的供应商(例如Akamai)的帮助下建立自己的CDN。


1

我建议您将使用情况基于所定位用户的一般位置。

如果您的网站面向大众,那么使用Google的CDN将是一个不错的选择。

如果您的网站也针对中国,那么使用Microsoft的CDN将是一个更好的选择。根据我的经验,我知道Google的服务器一直受到中国政府的封锁,导致使用它们的网站无法加载。

*请注意,您可以cos创建特定于区域的站点,例如cn.mysite.com以专门针对中国,但是如果您的资源和时间不足,则值得考虑。

Microsoft CDN的完整列表在这里。 http://www.asp.net/ajaxlibrary/cdn.ashx

此后,它们已重命名为ajax.aspnetcdn.com,从而减少了被防火墙规则阻塞的可能性。


-3

我会同时使用!

由于Google Jquery托管已经存在了很长时间,因此与Microsoft相比,人们已经可以对其进行缓存的可能性要高得多,所以我会首先使用它。

就个人而言,我会使用这样的内容-

if (typeof jQuery == 'undefined') {  
    // jQuery is not loaded  

  document.write("<scr" + "ipt type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js\"></scr" + "ipt>");
        }
} else {
    // jQuery is loaded
}

(不确定这100%是否有效,但是我只是写这个想法而不是示例-这是因为Google托管的Jquery而不是Microsoft的Jquery,因为我找不到链接)


6
除非将jQuery引入页面,否则将永远不会定义jQuery。默认情况下,缓存.js文件不会使所有浏览器页面都可以使用它!
Falkayn

1
这有效:S重新读取脚本-如果未定义脚本,它将编写并加载?
威尔

12
我从来不明白为什么人们会使用“ <scr” +“ ipt ...”
匿名

3
“取决于浏览器,其他先前的javascript的数量以及整体代码的格式,这样做是为了防止解析器将<script>和</ script>标记解释为可执行代码,而不是字符串。被写。”
SeanJA

2
问题在于,除非您主动加载它,否则jQuery就永远不会定义它。在脚本中,第一个分支将始终被执行(除非上面有另一个jQuery包含),从而使脚本多余。
詹斯格拉姆
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.