使用哪个 CDN 链接到 jquery 文件或任何 javascript 文件真的很重要吗?其中一个可能比另一个更快吗?还有哪些其他因素会影响您决定使用哪个 CDN?我知道微软、雅虎和谷歌现在都有CDN。

有帮助吗?

解决方案

根据评论更新:

简洁版本: 这并不重要,但这可能取决于他们托管的内容。它们都承载着不同的东西:Google 没有托管 jQuery.Validate,微软没有托管 jQuery-UI,自 2016 年起他们就托管了!!,微软提供了他们的脚本,否则这些脚本将通过 ScriptResource.axd 以及更容易的集成(例如 带有 ASP.Net 4.0 的 ScriptManager).

重要的提示: 如果您正在构建 Intranet 应用程序,请远离 CDN 方法。谁主持并不重要,除非您在 非常 服务器内部超载,没有任何 CDN 能够为您提供比本地 100mb/1GB 以太网更好的性能。如果您将 CDN 用于严格的内部应用程序,那么您 损害表现. 正确设置缓存过期标头 并忽略纯内网场景中存在的CDN。

两者被阻止的可能性似乎大致相等,几乎为零。我所从事的合同并非如此,但这似乎是一个例外。另外,自从最初发布这个答案以来,它周围的环境已经发生了很大的变化,Microsoft CDN 已经取得了很大的进步。

我当前正在进行的项目使用两个 CDN,这最适合我们的解决方案。有几个因素造成了这种情况。用户具有 旧版浏览器 每个域仍然可能同时发出 2 个请求 按照 HTTP 规范的建议. 。对于任何运行任何新的东西的人来说这都不是问题 支持流水线 (当前的每个浏览器),但基于另一个因素,我们也消除了这个限制,至少就 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 可能会早于 ajax.microsoft.com, ,仅仅是因为本地 DNS 服务器更有可能收到对其的请求(这是该区域惩罚中的第一个用户)。这是一个 非常 次要的事情,只有在性能极其重要(精确到毫秒)时才应考虑。
(是的:我意识到这一点与我使用两个 CDN 的情况相反,但在我们的例子中,DNS 时间远远被发生的 javascript/阻塞的等待时间所掩盖)

最后,如果您还没有看过的话,最好的工具之一是 萤火虫, ,以及它的一些插件: 页面速度慢速. 。如果您使用 CDN,但您的页面由于没有缓存标头而每次都请求图像,那么您就错过了唾手可得的成果。Firebug 的 Net 面板可以快速为您提供页面加载时间的快速细分,而 Page Speed/YSlow 可以提供一些好的建议来提供帮助。

其他提示

您绝对应该使用谷歌CDN的jQuery(这是由微软为中心的开发商推出)。

这是简单的统计。那些谁也考虑使用MS CDN的jQuery将永远是少数。有太多的非MS开发者使用jQuery谁将会使用谷歌的,也不会考虑使用微软的。由于大胜利与一个公共CDN是改进的高速缓存时,多个的CDN中分裂的使用降低了该益处的潜力。

谷歌会向您发送自己的软件精缩jQuery的版本,这个版本是6KB比MS服务标准精缩版打火机。去谷歌。

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

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

还应当指出的是,作为ajax.microsoft.com是microsoft.com请求的子域发送加入需要得到回文件的总时间所有microsoft.com饼干。

此外,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是方式更受欢迎这极大地增加的一个文件被缓存的机会。

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

这可能并不重要,但你可以与一些A / B测试验证这一点。发送一半的流量到一个CDN,一半给对方,并设置一些分析来测量响应。我认为它更重要的是能够在一个情况下轻松切换或其他有一些严重的问题不可用

我知道我插嘴有点晚了这里,但这里是我一直在生产中使用的代码。我从来没有问题吧,但您的里程可能会有所不同。请确保您在自己的环境中进行测试。

<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 从谷歌jQuery的加载。所以做的Twitter,#1和许多其他许多人。因此,有相当高的可能性,你的网站的用户已经在它所有缓存= 没有下载

忘记验证器,带宽和速度,因为这是主要的好处。否则,任何其他CDN选项将在相同的水平实质上执行。

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

我自己实际上对此很好奇,因此我使用以下各项设置了一个 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

正如所述 平多姆:

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

这意味着使用最广泛的CDN将有可能获得的赔率,这可以为您的网站带来回报。

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

我认为这取决于哪里是你的目标受众。您可以使用alertra.com到来自世界各地的许多地方,检查这两个CDN速度。

另一个注意事项 - 如果您的网站是 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。

我的答案是比别人有点不同,我将与微软去,如果你需要jQuery的验证,如果你正在使用jQuery几乎每个人都需要的。

微软CDN的HTTP连接保持活动是大利好,当你申请多个项目。

所以如果你需要jQuery验证,然后使用微软CDN,即使你需要jQuery UI的使用微软因为谷歌没有不守保活那么每个请求都在它自己的。所以在这样的混合是加。如果您使用Microsoft仅验证器然后你正在做与谷歌服务器为每个请求单独的连接。

在它说,微软没有提供UI的夏日,即是不正确的(任何更多)。它可以在 http://www.asp.net/ajaxlibrary/cdn.ashx

使用谷歌CDN时,有些时候人们作出错字如ajax.googelapis.com也可以考虑。这可能会创造一个真正讨厌的XSS(跨站脚本)攻击。其实我已经测试了这一点通过注册googlapis.com错字并很快发现自己的服务对JavaScript的请求,地图,CSS等。

我通过电子邮件谷歌,并要求他们注册类似CDN错字URL的,但一直没有收到回音。这可能是一个真正的理由不依靠CDN的,因为有潜在的危险攻击者等待错字请求,并可以很容易地服务于背部的jQuery等与XSS负载。

感谢您

根据其行业应用的目标,你可能不希望使用由其他组织管理的CDN。它往往引起关于合规,隐私和保密的问题。

例如,当你包括谷歌分析中的安全应用,浏览器仍然发送当前URL为“referer”标头。任何标识,说会话ID或秘密令牌可能会出现在自己的日志中。例如,如果192.0.2.5references的客户端IP 的https://healthsystem.example/condition/impotence ,那么好,你可以推断出这被认为是相当私人信息。

其他情况下包括在URL中的结果的信息,例如账户号码,社会安全号码或会话的信息。这种类型的数据绝不应在URL中,因为它可以在应用程序的外部使用。

虽然你可以信任谷歌,微软或雅虎,你的用户可能不会。

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

我会建议你立足于您的目标一般用户的位置您的使用情况。

如果您的网站是针对普通大众,然后使用谷歌的CDN将是一个不错的选择。

如果您的网站也针对中国,然后使用微软的CDN将是一个更好的选择。 我从我的经验知道,作为谷歌的服务器继续得到阻止中国政府使用它们未加载渲染的网站。

*注意:您可以COS的创建区域特定的网站,例如cn.mysite.com专门迎合中国,但如果你用尽资源和时间,它值得考虑。

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

此后,他们重新命名为 ajax.aspnetcdn.com 下,其通过防火墙规则减少堵塞的可能性。

我会同时使用!

随着谷歌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和不是微软一个,因为我无法找到链接)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top