用于jQuery或Google CDN的Microsoft CDN?

时间:2009-09-18 23:08:57

标签: javascript jquery performance httprequest cdn

您使用哪个CDN链接到您的jquery文件或任何javascript文件实际上是否重要。一个人可能比另一个人更快吗?还有哪些其他因素可以起到决定使用哪种cdn的作用?我知道微软,雅虎和谷歌现在都有CDN。

18 个答案:

答案 0 :(得分:151)

根据评论进行更新:

简短版本这并不重要,但可能取决于他们托管的内容。他们都有不同的东西:谷歌没有托管jQuery.Validate,微软没有托管jQuery-UI,自2016年以来他们这样做!!,微软提供的脚本本来可以通过ScriptResource.axd提供,并且更容易集成(例如ScriptManager with ASP.Net 4.0)。

重要说明:如果您正在构建Intranet应用程序,请远离CDN方法。无论谁托管它都没关系,除非你内部的非常超载服务器,没有CDN会给你比本地100mb / 1GB以太网更多的性能。如果您使用CDN进行严格的内部应用,则会影响性能Set your cache expiration headers correctly并忽略仅在Intranet中存在的CDN。

被阻挡的可能性似乎大致相等,几乎为零。我曾经合作过这种情况并非如此,但这似乎是一个例外。此外,自从这个答案的原始发布,围绕它的上下文发生了很大变化,微软CDN取得了很大进展。

我目前正在使用的项目使用两种最适合我们解决方案的CDN。有几个因素影响到这一点。拥有旧浏览器的用户仍可能每个域as recommended by the HTTP specification同时发出2个请求。对于运行supports pipelining(每个当前浏览器)的任何新东西来说,这不是一个问题,但基于另一个因素,我们也正在淘汰这个限制,至少就javascript而言。

谷歌我们正在使用的CDN:

我们正在使用的Microsoft的CDN:

我们的服务器:

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

由于我们的构建过程的一部分是组合和缩小所有自定义javascript,我们通过自定义脚本管理器执行此操作,该脚本管理器包括这些脚本的发布或调试(非缩小)版本,具体取决于构建。由于Google没有托管jQuery验证包,因此这可能是一个缺点。 MVC在其2.0版本中包含/使用它,因此您可以完全依赖Microsoft的CDN满足您的所有需求and all of it automatic via the ScriptManager

要做的唯一其他论点是DNS时间,在页面加载速度方面存在成本。 平均值仅仅因为它的使用时间更长(它已经存在更长时间)ajax.googleapis.com很可能比ajax.microsoft.com更快地返回,只是因为本地DNS服务器更有可能得到它的请求(这是区域罚款的第一个用户)。这是非常次要的事情,只有在性能非常重要时才应考虑,直到毫秒。
(是的:我意识到这一点与我使用两个CDN相反,但在我们的情况下,DNS时间远远超过了发生javascript /阻塞的等待时间)

最后,如果你还没有看过它,那么最好的工具之一是Firebug,还有一些插件:Page SpeedYSlow。如果您使用CDN,但由于没有缓存标题,您的页面每次都会请求图像,那么您就会错过这种低调的结果。 Firebug的Net面板可以快速为您提供页面加载时间的快速细分,而Page Speed / YSlow可以提供一些很好的建议来帮助您。

答案 1 :(得分:88)

你绝对应该使用Google CDN for jQuery(这是来自以微软为中心的开发人员)。

这是简单的统计数据。那些考虑将MS CDN用于jQuery的人将永远是少数。有太多的非MS开发人员使用jQuery,他们会使用谷歌,而不会考虑使用微软的。从one of the big wins with a public CDN is improved caching开始,在多个CDN之间分配使用会降低这种益处的可能性。

答案 2 :(得分:20)

Google将向您发送使用自己的软件缩小的jQuery版本,此版本比MS提供的标准缩小版本轻6kb。去谷歌。

答案 3 :(得分:18)

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

根据您的需要,这可能是相关的。

答案 4 :(得分: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.4K

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

此外,正如其他人所说,谷歌CDN更受欢迎,大大增加了缓存文件的机会。

所以我强烈建议使用谷歌。

答案 5 :(得分:11)

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

答案 6 :(得分:7)

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

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

答案 7 :(得分: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> 

答案 8 :(得分:5)

  

一个可能比另一个更快吗?

我自己对此感到好奇,所以我使用以下各项设置了一个jsbin测试页,然后通过webpagetest.org的视觉比较工具运行它。我测试过:

  1. ajax.googleapis.com
  2. code.jquery.com
  3. ajax.aspnetcdn.com
  4. cdnjs.cloudflare.com
  5. 两个测试中谁最快: 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

答案 9 :(得分:4)

Pingdom所述:

  

当有人访问您的网站时,如果他们已经访问过其他网站   在同一个CDN上使用相同jQuery文件的站点,该文件将   已被缓存,根本不需要下载。它不能   得到任何比这快。

     

这意味着最广泛使用的CDN将有其可能性   方,这可以为您的网站带来回报。

     

关于绩效的一些观察:        谷歌的CDN一直是北美和欧洲三者中最慢的。在欧洲,微软的CDN是最快的。

答案 10 :(得分:3)

我认为这取决于目标受众的位置。您可以使用alertra.com检查全球许多地方的CDN速度。

答案 11 :(得分:3)

另外一个考虑因素 - 如果您的站点是SSL并且您需要支持Android 2.1(或更早版本),则根据此问题,HTTPS版本的Microsoft CDN上的SSL证书将使这些版本的Android浏览器崩溃:{{ 3}}。这不是微软的“错误”,因为SSL证书在技术上是有效的,而且缺陷在于Android的SSL实施......但它会使您的网站崩溃。

Google CDN上的SSL证书不会影响此特定问题(与证书的“证书主题替代名称”相关)。

因此,对于SSL + Android 2.1支持,请使用Google CDN。

答案 12 :(得分:2)

我的答案与其他人有点不同,如果你需要jquery验证器,我会选择微软,如果你使用jquery几乎每个人都需要它。

Microsoft CDN http连接是Keep-Alive,当您请求多个项目时,这是一个很大的优势。

因此,如果你需要jquery验证然后使用Microsoft CDN,即使你需要jquery ui使用microsoft,因为google不能保持keep-alive所以每个请求都是自己的。所以以这种方式混合是好的。如果你只使用微软进行验证,那么你就会为每个请求与谷歌服务器分开进行连接。

答案 13 :(得分:1)

在夏季,它说微软不提供UI,这是不正确的(更多)。它可以在http://www.asp.net/ajaxlibrary/cdn.ashx下载。

答案 14 :(得分:1)

在使用谷歌CDN时也要考虑有时人们会输入错误消息,例如ajax.googelapis.com。这可能会造成一个非常讨厌的xss(跨站点脚本)攻击。我实际上已经通过注册googlapis.com错误来测试了这一点,很快就发现自己正在处理javascript,地图,CSS等请求。

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

谢谢

答案 15 :(得分:1)

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

例如,当您在安全的应用程序中包含Google Analytics时,浏览器仍会将当前的URL作为&#34; referer&#34;头。任何标识符(例如会话ID或秘密令牌)都可能出现在其日志中。例如,如果客户端IP为192.0.2.5引用https://healthsystem.example/condition/impotence,那么您可以推断出被认为是私有的信息。

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

虽然您可能信任Google,Microsoft或Yahoo,但您的用户可能不会。

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

答案 16 :(得分:1)

我建议您根据所定位用户的一般位置来确定您的使用情况。

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

如果您的网站也是针对中国的,那么使用微软的CDN将是更好的选择。 根据我的经验,我知道谷歌的服务器一直被中国政府封锁,使用它们的网站无法加载。

*请注意,您可以创建特定于地区的网站,例如cn.mysite.com专门为中国服务,但如果你的资源和时间都很少,那值得考虑。

此处列出了Microsoft CDN的完整列表。 http://www.asp.net/ajaxlibrary/cdn.ashx

他们已经重命名为 ajax.aspnetcdn.com ,这减少了防火墙规则阻塞的可能性。

答案 17 :(得分:-3)

我会同时使用它们!

由于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,而不是微软的,因为我找不到链接)