Answers:
根据评论更新:
简短版:没什么关系,但可能取决于他们托管的内容。他们都拥有不同的东西:谷歌没有托管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:
我们的服务器:
由于构建过程的一部分是合并和最小化所有自定义javascript,因此我们通过自定义脚本管理器执行此操作,该脚本管理器根据构建情况包括这些脚本的发行或调试(非最小化)版本。由于Google未托管jQuery验证程序包,因此这可能是不利的一面。MVC在其2.0版本中包含/使用了它,因此您可以完全依靠Microsoft的CDN来满足您的所有需求,并且所有这些都可以通过ScriptManager自动实现。
唯一需要考虑的其他参数是DNS时间,这在页面加载速度方面是有代价的。 平均:仅因为使用了更多时间(时间较长)ajax.googleapis.com
才比DNS更快返回DNS ajax.microsoft.com
,仅是因为本地DNS服务器更有可能收到请求(这是该区域中的第一个用户) 。这是一件非常小的事情,只有在性能极其重要(低至毫秒)的情况下才应考虑。
(是的:我意识到这一点与我同时使用两个CDN都是相反的,但是在我们的案例中,DNS时间远远超过了发生的javascript /阻止的等待时间)
最后,如果您没有看过它,那么Firebug是其中最好的工具,还有一些它的插件:Page Speed和YSlow。如果您使用CDN,但是由于没有缓存头,则页面每次都在请求图像,那么您将错过低挂的果实。Firebug的“网络”面板可以快速为您提供页面加载时间的快速细分,而页面速度/ YSlow可以提供一些很好的建议来帮助您。
您绝对应该使用jQuery的Google CDN(这是一个以Microsoft为中心的开发人员)。
这是简单的统计信息。那些会考虑将MS CDN用于jQuery的人永远是少数。使用jQuery的非MS开发人员太多了,他们会使用Google的并且不会考虑使用Microsoft的。由于改进公共缓存是使用公共CDN的一项重大成就,因此在多个CDN之间分配使用量会减少这种利益的潜力。
Google会向您发送一个使用自己的软件精简的jQuery版本,此版本比MS提供的标准精简版本轻6kb。前往Google。
要考虑的一件事是,两家公司都提供略有不同的“额外”库:
根据您的需求,这可能很重要。
还应注意,由于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。
我知道我在这里迟到了,但是这里是我在生产中一直使用的代码。我从来没有遇到过问题,但是您的里程可能会有所不同。确保您在自己的环境中对其进行测试。
<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>
关于统计信息:jquery.com从Google加载jQuery。Twitter,Stackoverflow等许多其他公司也是如此。因此,您的网站用户很有可能已经缓存了它= 根本没有下载。
忘记验证器,带宽和速度,因为这是主要优点。否则,任何其他CDN选项都将在基本上相同的级别上执行。
一个可能比另一个更快吗?
我自己实际上对此很好奇,所以我使用以下每个设置了一个jsbin测试页,然后通过webpagetest.org的可视化比较工具运行它。我测试了:
谁是最快的:两个测试中的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
我认为这取决于您的目标受众在哪里。您可以使用alertra.com检查来自世界各地的CDN速度。
另一个注意事项-如果您的站点是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。
在总结中,它说微软没有提供UI,这是不正确的(不再)。可以从http://www.asp.net/ajaxlibrary/cdn.ashx下载。
还要考虑使用Google CDN时,有时人们会打错字,例如ajax.googelapis.com。这可能会造成真正讨厌的xss(跨站点脚本)攻击。我实际上通过注册googlapis.com错字测试了这一点,很快发现自己正在处理对javascript,地图,css等的请求。
我通过电子邮件发送给Google,并要求他们注册类似的CDN错字网址,但没有收到回复。这可能是不依赖CDN的真正原因,因为有潜在危险的攻击者在等待输入错误,并且可以轻松地使用xss有效负载为jquery等提供服务。
谢谢
根据应用程序针对的行业,您可能不想使用其他组织管理的CDN。它通常会引起有关合规性,隐私和机密性的问题。
例如,当您在安全的应用程序中包含Google Analytics(分析)时,浏览器仍会将当前URL发送为“引荐来源”标头。任何标识符(例如会话ID或秘密令牌)都可能出现在其日志中。例如,如果客户端IP为192.0.2.5,则引用https://healthsystem.example/condition/impotence,那么可以推断出相当私有的信息。
其他情况包括后果信息,例如帐号,社会保险号或URL中的会话信息。这类数据绝不能在URL中,因为它可以在应用程序外部使用。
尽管您可能信任Google,Microsoft或Yahoo,但您的用户却可能不信任。
对于金融,法律和医疗保健等行业,您可能希望在可以签署BAA的供应商(例如Akamai)的帮助下建立自己的CDN。
我建议您将使用情况基于所定位用户的一般位置。
如果您的网站面向大众,那么使用Google的CDN将是一个不错的选择。
如果您的网站也针对中国,那么使用Microsoft的CDN将是一个更好的选择。根据我的经验,我知道Google的服务器一直受到中国政府的封锁,导致使用它们的网站无法加载。
*请注意,您可以cos创建特定于区域的站点,例如cn.mysite.com以专门针对中国,但是如果您的资源和时间不足,则值得考虑。
Microsoft CDN的完整列表在这里。 http://www.asp.net/ajaxlibrary/cdn.ashx
此后,它们已重命名为ajax.aspnetcdn.com,从而减少了被防火墙规则阻塞的可能性。
我会同时使用!
由于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,因为我找不到链接)
jQuery
就永远不会定义它。在脚本中,第一个分支将始终被执行(除非上面有另一个jQuery包含),从而使脚本多余。