一个人可能比另一个人更快吗?
我自己实际上很好奇,所以我使用以下各项设置了一个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
还应该注意的是,由于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.4K
http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js - 26.5K
此外,正如其他人所说,谷歌CDN更受欢迎,大大增加了文件缓存的可能性。
所以我强烈建议使用谷歌。
在夏季,它说微软不提供UI,这是不正确的(更多)。它可以下载到 http://www.asp.net/ajaxlibrary/cdn.ashx 。
它可能没关系,但您可以通过一些A / B测试来验证这一点。将一半流量发送到一个CDN,将一半流量发送到另一个CDN,并设置一些分析来测量响应。我认为,如果一个或另一个有一些严重的不可用问题,能够轻松切换更为重要。
谷歌将向您发送使用自己的软件缩小的jQuery版本,此版本比MS提供的标准缩小版本轻6kb。去谷歌。
我建议您根据您定位的用户的一般位置来确定您的使用情况。
如果您的网站面向普通公众,那么使用Google的CDN将是一个不错的选择。
如果您的网站也是针对中国的,那么使用微软的CDN将是更好的选择。 根据我的经验,我知道Google的服务器一直被中国政府阻止,使得使用它们的网站无法加载。
*请注意,您可以创建特定于地区的网站,例如cn.mysite.com专门为中国服务,但如果你的资源和时间都很少,那值得考虑。
这里列出了Microsoft CDN的完整列表。 http://www.asp.net/ajaxlibrary/cdn.ashx
他们已经改名为 的 ajax.aspnetcdn.com 强> ,这减少了防火墙规则阻塞的可能性。
如上所述 Pingdom的 :
当有人访问您的网站时,他们是否已访问过其他网站 在同一个CDN上使用相同jQuery文件的站点,该文件将 已被缓存,根本不需要下载。它可以 得到任何比这快。 这意味着最广泛使用的CDN将有其可能性 方,这可以为您的网站带来回报。 关于绩效的一些观察: 谷歌的CDN一直是北美和欧洲三者中最慢的。在欧洲,微软的CDN是最快的。
当有人访问您的网站时,他们是否已访问过其他网站 在同一个CDN上使用相同jQuery文件的站点,该文件将 已被缓存,根本不需要下载。它可以 得到任何比这快。
这意味着最广泛使用的CDN将有其可能性 方,这可以为您的网站带来回报。
关于绩效的一些观察: 谷歌的CDN一直是北美和欧洲三者中最慢的。在欧洲,微软的CDN是最快的。
我的答案与其他人有点不同,如果你需要jquery验证器,我将使用微软,如果你使用jquery几乎每个人都需要它。
Microsoft CDN http连接是Keep-Alive,当您请求多个项目时,这是一个很大的优势。
因此,如果你需要jquery验证然后使用Microsoft CDN,即使你需要jquery ui使用microsoft,因为google不能保持keep-alive所以每个请求都是自己的。所以以这种方式混合是好的。如果你只使用微软验证器,那么你正在为每个请求与谷歌服务器分开连接。
我知道我在这里迟到了,但这里是我在制作中使用的代码。我从来没有遇到过这个问题,但你的里程可能会有所不同。确保在自己的环境中进行测试。
<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>
另外一个考虑因素 - 如果您的站点是SSL并且您需要支持Android 2.1(或更早版本),则根据此问题,HTTPS版本的Microsoft CDN上的SSL证书将使这些版本的Android浏览器崩溃: http://code.google.com/p/android/issues/detail?id=5001 。这不是微软的“错误”,因为SSL证书在技术上是有效的,而且缺陷在Android的SSL实施中......但它会使您的网站崩溃。
Google CDN上的SSL证书不会影响此特定问题(与证书的“证书主题替代名称”相关)。
因此,对于SSL + Android 2.1支持,请使用Google CDN。
的 根据评论更新: 强>
的 精简版: 强> 它没关系,但可能取决于它们的主机。他们都有不同的东西:谷歌没有托管jQuery.Validate,微软没有托管jQuery-UI,自2016年以来他们做!!,微软提供的脚本本来可以通过 ScriptResource.axd 和更容易的集成(例如 ScriptManager与ASP.Net 4.0 )。
ScriptResource.axd
的 重要的提示: 强> 如果您正在构建Intranet应用程序,请远离CDN方法。无论是谁主持它都没关系,除非你在 的 非常 强> 在内部超载服务器,没有CDN会给你比本地100mb / 1GB以太网更多的性能。如果您使用CDN进行严格的内部应用程序,那么您就是 的 伤害表现 强> 。 正确设置缓存过期标头 并忽略仅在Intranet场景中存在的CDN。
被阻挡的可能性似乎大致相等,几乎为零。我曾经合作过这种情况并非如此,但这似乎是一个例外。此外,自从这个答案的原始发布,围绕它的上下文发生了很大变化,Microsoft CDN取得了很大进展。
我目前正在使用的项目使用两种最适合我们解决方案的CDN。有几个因素影响到这一点。用户有 的 旧浏览器 强> 仍然可能每个域同时发出2个请求 按照HTTP规范的建议 。对于那些运行任何体面新东西的人来说,这不是一个问题 支持流水线 (每个当前的浏览器),但基于另一个因素我们也淘汰了这个限制,至少就javascript而言。
Google的CDN我们用于:
微软的CDN我们用于:
服务器:
由于我们的构建过程的一部分是组合和缩小所有自定义javascript,我们通过自定义脚本管理器执行此操作,该脚本管理器包括这些脚本的发布或调试(非缩小)版本,具体取决于构建。由于Google没有托管jQuery验证包,因此这可能是一个缺点。 MVC在其2.0版本中包含/使用它,因此您可以完全依赖Microsoft的CDN来满足您的所有需求, 并通过ScriptManager自动完成所有操作 。
要做的唯一其他论点是DNS时间,在页面加载速度方面存在成本。 的 一般: 强> 仅仅是因为它使用得更多(它的使用时间更长) ajax.googleapis.com 可能会早于DNS返回 ajax.microsoft.com ,只是因为本地DNS服务器更有可能获得它的请求(这是区域惩罚中的第一个用户)。这是一个 的 非常 强> 小事,只应该考虑性能非常重要,可达毫秒级。 (是的:我意识到这一点与我使用两个CDN相反,但在我们的例子中,DNS时间远远超过了发生javascript /阻塞的等待时间)
ajax.googleapis.com
ajax.microsoft.com
最后,如果您还没有看过它,那么最好的工具之一就是 萤火 ,以及它的一些插件: 页面速度 和 YSlow的 。如果您使用CDN,但由于没有缓存标题,您的页面每次都会请求图像,那么您就会错过这种低调的结果。 Firebug的Net面板可以快速为您提供页面加载时间的快速细分,Page Speed / YSlow可以提供一些很好的建议来帮助您。
我会用两个!
由于Google Jquery托管已经存在了很长时间,因此与微软相比,人们已经将其缓存的可能性要高得多,所以我会先拥有它。
就个人而言,我会使用这样的东西 -
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%是否有效,但我只是想写下这个想法而不是示例 - 这引用了谷歌托管的Jquery,而不是微软的,因为我找不到链接)
根据应用程序所针对的行业,您可能不希望使用其他组织管理的CDN。它经常引发有关合规性,隐私和机密性的问题。
例如,当您在安全的应用程序中包含Google Analytics时,浏览器仍会将当前的URL作为“referer”标头发送。任何标识符(例如会话ID或秘密令牌)都可能出现在其日志中。例如,如果客户端IP为192.0.2.5,则引用 HTTPS://healthsystem.example/condition/impotence 那么,你可以推断出被认为是私人的信息。
其他情况包括结果信息,例如URL中的帐号,社会保险号或会话信息。这种数据永远不应该在URL中,因为它可以在应用程序之外使用。
虽然您可能信任Google,Microsoft或Yahoo,但您的用户可能不会。
对于财务,法律和医疗等行业,您可能希望在供应商(例如Akamai)的帮助下建立自己的CDN,您可以使用该协议签署BAA。
我认为这取决于您的目标受众群体。您可以使用alertra.com检查来自世界各地的CDN速度。
这是关于统计数据: jquery.com 从Google加载jQuery。 Twitter,Stackoverflow和许多其他人也是如此。因此,您的网站用户已经拥有缓存=的可能性非常高 的 完全没有下载 强> 。
忘记验证器,带宽和速度,因为这是主要的好处。否则,任何其他CDN选项将基本上在同一级别执行。
还要考虑在使用谷歌CDN时有时人们会输入错误信息,例如ajax.googelapis.com。这可能会造成一个非常讨厌的xss(跨站点脚本)攻击。我实际上通过注册googlapis.com拼写错误测试了这一点,很快就发现自己正在处理javascript,map,css等请求。
我通过电子邮件发送了谷歌并要求他们注册类似的CDN拼写错误网址,但没有收到回复。这可能是不依赖CDN的真正原因,因为有潜在危险的攻击者在等待拼写错误请求,并且可以使用xss有效载荷轻松地回送jquery等。
谢谢
需要考虑的一件小事是,两家公司都提供略有不同的“额外”库:
根据您的需要,这可能是相关的。