用于jQuery或Google CDN的Microsoft CDN?

这实际上是关系你使用哪个CDN链接到你的jQuery文件或任何JavaScript文件的事情。 一个可能比另一个更快吗? 还有哪些因素可以起到决定使用cdn的作用? 我知道微软,雅虎和谷歌现在都有CDN了。

根据评论更新:

短版:没关系,但可能取决于他们的东西。 他们都承载不同的东西:谷歌不主办jQuery.Validate,微软没有主办jQuery-UI,自2016年以来,他们做!,微软提供的脚本,否则将通过ScriptResource.axd和更容易集成(例如ScriptManager与ASP.Net 4.0 )。

重要说明:如果您正在构buildIntranet应用程序,请远离CDN方法。 不pipe是谁托pipe它,除非你在内部负载很重的服务器上,没有CDN会给你比本地100MB / 1GB以太网更多的性能。 如果您使用CDN进行严格的内部应用程序,则会损害性能 。 正确设置caching过期标题并忽略仅限Intranet情况下的CDN。

被阻止的可能性似乎大致相等,几乎为零。 我已经在合同上工作,但这似乎是个例外。 而且,自从这个答案的原始发布以来,围绕它的上下文发生了很大的变化,微软的CDN取得了很大的进展。

我目前正在使用的这个项目使用了最适合我们解决scheme的CDN。 有几个因素影响到这一点。 使用旧浏览器的用户仍然可能按照HTTP规范的build议,为每个域创build两个同时请求。 对于任何运行支持stream水线操作 (每个当前浏览器)的新东西,这都不是问题,但是基于另一个因素,我们也敲除了这个限制,至less就javascript而言。

我们正在使用Google的CDN:

  • jquery.min.js
  • jquery-ui.min.js 。

我们正在使用微软的CDN:

  • MicrosoftAjax.js
  • MicrosoftAjaxWebForms.js (直到4.0,我们并没有完全删除所有的UpdatePanel)
  • jQuery.Validate.min.js

我们的服务器

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

由于我们构build过程的一部分是组合和缩小所有自定义JavaScript,因此我们通过自定义脚本pipe理器来执行此操作,这些脚本pipe理器包含这些脚本的发行版或debugging版(非缩小版),具体取决于构build版本。 由于Google不托pipejQueryvalidation包,这可能是一个不好的方面。 MVC在2.0版本中包含/使用了这个function,因此您可以完全依赖Microsoft的CDN来满足您的所有需求, 而且所有这些都是通过ScriptManager自动完成的 。

唯一需要做的另一个参数是DNS时间,这在页面加载速度方面是有成本的。 平均值:仅仅因为它的使用更多(时间更长), ajax.googleapis.com可能比ajax.microsoft.com更早由DNS返回,只是因为本地DNS服务器更可能得到它的请求(这是该地区罚款的第一个用户)。 这是一个非常小的事情,只有在性能非常重要的情况下才能考虑到这一点,直到毫秒。
(是的:我意识到这一点与我使用两个CDN相反,但在我们的情况下,DNS时间远远等于javascript / blocking的等待时间)

最后,如果你没有看过,最好的工具之一就是Firebug ,以及一些插件: Page Speed和YSlow 。 如果您使用CDN,但由于没有caching标题,您的页面每次都请求映像,因此您错过了低悬的成果。 Firebug的networking面板可以快速为您提供页面加载时间的快速分类,Page Speed / YSlow可以提供一些很好的帮助。

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

这是简单的统计数据。 那些会考虑使用MS CDN的jQuery将永远是less数。 有太多使用jQuery的非MS开发人员会使用Google,而不会考虑使用Microsoft的。 由于公共CDN的一个重大胜利就是改进了caching ,因此在多个CDN中拆分使用会降低这种利益的潜力。

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

要考虑的一个小问题是两家公司提供稍微不同的“额外”库:

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

还应该注意的是,因为ajax.microsoft.com是microsoft.com请求的子域,所以发送所有microsoft.com cookie添加到获取文件所需的总时间。

另外,ajax.microsoft.com使用的默认IIS7压缩比其他Web服务器使用的标准压缩要差一些。

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是更受欢迎的方式,大大增加了一个文件被caching的机会。

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

这可能没关系,但你可以通过一些A / Btesting来validation。 将一半的stream量发送到一个CDN,一半发送到另一个CDN,并设置一些分析来测量响应。 我认为能够轻松切换是非常重要的,以防其中一方出现严重的不可用问题。

我知道我在这里迟了一会儿,但是这里是我在生产中使用的代码。 我从来没有问题,但你的里程可能会有所不同。 确保你在自己的环境中testing它。

 <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,Stackoverflow和其他许多人也是如此。 所以,有很高的可能性,您的网站用户已经caching= 根本没有下载

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

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

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

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

我真的好奇这个,所以我使用下面的每个设置jsbintesting页,然后通过webpagetest.org的视觉比较工具运行它。 我testing了:

  1. ajax.googleapis.com
  2. code.jquery.com
  3. ajax.aspnetcdn.com
  4. cdnjs.cloudflare.com

谁是最快的:在两个testing中0.1秒的code.jquery.com

谁是最慢的: ajax.aspnetcdn.com第一次testing时间为0.7秒,第二次testing时ajax.googleapis.com时间为1秒

这是第一次testing (每次testing3次):

video: 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

这是第二个testing (每个另外3个):

video: http : //www.webpagetest.org/video/view.php?id=121019_a7b351f706cad2c25664fee7ef349371f17c4e74

报告: http : //www.webpagetest.org/video/compare.php? tests= 121019_MP_KJN,121019_S6_KJP121019_V9_KJQ121019_VY_KJR

正如Pingdom所说:

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

这意味着使用最为广泛的CDN将有可能支持您的网站。

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

我的答案有点不同于其他人,如果你需要jqueryvalidation器,几乎每个人都需要使用jquery,我会用微软。

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

所以,如果你需要jQuery的validation,然后使用微软的CDN,即使你需要jquery ui使用微软,因为谷歌不保持保持活跃,所以每个请求都是在自己的。 所以这样混合就好了。 如果你只使用microsoftvalidation器,那么你正在做每个请求与谷歌服务器分开的连接。

在总结它说,微软不提供用户界面,这是不正确的(任何更多)。 它可以在http://www.asp.net/ajaxlibrary/cdn.ashx下载。;

有时候还会考虑在使用Google CDN的时候,人们会犯类似ajax.googelapis.com的拼写错误。 这可能会创build一个非常糟糕的xss(跨站点脚本)攻击。 我实际上已经通过注册一个googlapis.com错字testing了这个,并很快发现自己服务于JavaScript,地图,CSS等的请求。

我向Google发送了电子邮件,要求他们注册类似的CDN错字URL,但没有收到回复。 这可能是一个真正的原因,不依靠CDN的,因为有潜在的危险的攻击者等待错别字请求,并可以很容易地返回jquery等与xss有效载荷。

谢谢

我build议您将您的使用量基于您定位的用户的一般位置。

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

如果您的网站也是针对中国的,那么使用微软的CDN将是一个更好的select。 根据我的经验,我知道Google的服务器一直受到中国政府的阻挠,使得使用这些服务器的网站无法加载。

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

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

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

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

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

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

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

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

我会同时使用!

由于Google Jquery的托pipe时间更长,因此与微软相比,人们已经拥有了更高的存储空间,所以我首先要做到这一点。

就个人而言,我会用这样的东西 –

 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%的作品,但我只是想写的想法,而不是例子 – 这引用谷歌托pipe的Jquery而不是微软的,因为我找不到链接)