187

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

4

17 回答 17

152

根据评论更新:

简短版:没关系,但可能取决于他们托管的内容。它们都托管不同的东西:Google 不托管 jQuery.Validate,Microsoft 不托管 jQuery-UI,自 2016 年以来他们托管了!!,Microsoft 提供了原本可以通过它们提供服务的脚本,ScriptResource.axd并且更容易集成(例如ScriptManager 与 ASP.净 4.0)。

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

被阻止的机会似乎大致相同,几乎为零。我处理过的合同并非如此,但这似乎是个例外。此外,自从最初发布此答案以来,围绕它的上下文发生了很大变化,Microsoft CDN 取得了很大进展。

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

我们使用的 Google 的 CDN:

我们使用的微软 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/阻塞的等待时间所掩盖)

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

于 2009-09-18T23:22:59.533 回答
89

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

就是简单的统计。那些会考虑为 jQuery 使用 MS CDN 的人永远是少数。有太多使用 jQuery 的非 MS 开发人员会使用 Google 的,而不会考虑使用 Microsoft 的。由于公共 CDN 的一大优势是改进了缓存,因此在多个 CDN 之间拆分使用会降低获得该好处的潜力。

于 2009-11-20T05:53:13.947 回答
20

谷歌会给你一个用他们自己的软件缩小的 jQuery 版本,这个版本比 MS 提供的标准缩小版本轻 6kb。去谷歌吧。

于 2009-12-30T12:55:27.527 回答
18

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

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

于 2010-01-15T12:26:55.363 回答
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 更受欢迎,这大大增加了文件被缓存的机会。

所以我强烈推荐使用谷歌。

于 2010-11-21T22:46:38.937 回答
11

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

于 2009-09-18T23:20:25.653 回答
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> 
于 2010-08-12T11:29:57.480 回答
6

一个可能比另一个快吗?

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

  1. ajax.googleapis.com
  2. 代码.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

于 2012-10-19T19:25:10.470 回答
4

正如Pingdom所说:

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

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

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

于 2013-07-16T07:34:47.363 回答
3

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

于 2009-10-11T08:36:29.117 回答
3

另一个考虑因素 - 如果您的站点是 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。

于 2011-01-20T23:58:11.967 回答
2

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

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

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

于 2010-08-19T04:56:32.867 回答
1

总而言之,它说微软不提供 UI,这是不正确的(不再)。它可以在http://www.asp.net/ajaxlibrary/cdn.ashx下载。

于 2010-09-26T19:23:49.027 回答
1

还要考虑在使用 Google CDN 时,有时人们会打错字,例如 ajax.googelapis.com。这可能会造成非常讨厌的 xss(跨站点脚本)攻击。我实际上已经通过注册一个 googlapis.com 错字测试了这一点,并且很快发现自己在为 javascript、maps、css 等提供服务。

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

谢谢

于 2012-07-15T21:12:52.890 回答
1

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

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

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

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

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

于 2014-05-16T02:31:52.177 回答
1

我建议您根据您所定位的用户的大致位置来使用。

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

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

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

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

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

于 2014-06-18T01:09:51.707 回答
-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 的,因为我找不到链接)

于 2009-10-11T11:39:12.720 回答