使用哪个CDN来链接您的jQuery文件或其他JavaScript文件是否真的很重要? 其中一个可能比另一个更快吗? 哪些因素可能影响您决定使用哪个CDN? 我知道微软,雅虎和谷歌现在都有CDN。
使用哪个CDN来链接您的jQuery文件或其他JavaScript文件是否真的很重要? 其中一个可能比另一个更快吗? 哪些因素可能影响您决定使用哪个CDN? 我知道微软,雅虎和谷歌现在都有CDN。
根据评论更新:
简短版本:这个不太重要,但可能取决于他们托管的内容。它们都托管不同的内容:谷歌不托管jQuery.Validate,Microsoft自2016年以来开始托管jQuery-UI!!,Microsoft提供了一些原本会通过ScriptResource.axd
提供服务的脚本并提供更容易的集成(如与ASP.Net 4.0一起使用的ScriptManager)。
重要注意事项:如果您正在构建一个内部网络应用程序,请避免使用CDN方法。除非您的内部服务器非常过载,否则无论是谁托管,没有任何CDN可以比本地100mb/1GB以太网提供更好的性能。如果您为严格内部应用程序使用CDN,则会损害性能。正确设置缓存到期标头并在仅限内部网络的情况下忽略CDN的存在。
被阻止的机会似乎相等,几乎为零。我曾经在合同中工作过,在这种情况下不成立,但这似乎是个例外。此外,自回答最初发布以来,周围的上下文发生了很大变化,Microsoft CDN取得了很大进展。
我们当前的项目同时使用了两个CDN,这对我们的解决方案最为适用。有几个因素影响了这个决定。使用旧浏览器的用户可能仍然会在每个域名上同时发起2个请求,正如HTTP规范所建议的那样。这对于任何运行较新版本并支持流水线处理(即所有现代浏览器)的人来说都不是问题,但基于另一个因素,我们也在消除此限制,至少在JavaScript方面是这样。
我们正在使用Google的CDN:
我们正在使用Microsoft的CDN:
我们的服务器:
由于我们的构建过程中涉及到合并和压缩所有自定义JavaScript代码,因此我们通过一个自定义脚本管理器来完成这个过程,该管理器根据构建情况包含发布或调试(未经压缩)版本的这些脚本。 由于Google不提供jQuery验证包的托管,这可能是一个缺点。 MVC在其2.0版本中包含/使用了它,因此您可以完全依赖Microsoft的CDN来满足所有需求,并且所有这些都可以通过ScriptManager自动完成,具体请参见该链接。
唯一需要考虑的另一个因素是DNS时间,这会影响页面加载速度的成本。平均而言:仅因为它被使用更多(已经存在更长时间),所以ajax.googleapis.com
返回DNS的时间很可能比ajax.microsoft.com
更短,因为本地DNS服务器更有可能收到请求(这是第一个用户在区域内的惩罚)。 这只是一个非常微小的问题,只有在性能极其重要、以毫秒为单位衡量时才应该考虑。
(是的:我意识到这一点与我们使用两个CDN的做法相反,但在我们的情况下,DNS时间被JavaScript阻塞等待时间所掩盖)
最后,如果您还没有了解过它,那么最好的工具之一就是Firebug,以及其中的一些插件:Page Speed和YSlow。 如果您使用CDN但由于缺少缓存头而每次都请求图像,则会错过低垂的果实。 Firebug的网络面板可以快速为您提供页面加载时间的简要分析,而Page Speed/YSlow可以提供一些有用的建议。
作为一个以微软为中心的开发者,我强烈建议你使用 Google CDN 来加载 jQuery。
这是基于简单的统计学原理。那些考虑使用 MS CDN 来加载 jQuery 的人永远只会是少数派。有太多非微软开发者使用 jQuery 会选择使用 Google 的,而不会考虑使用 Microsoft 的。由于公共 CDN 的一个重要优势是改进的缓存机制, 将使用权分散在多个 CDN 上会降低这种优势的潜力。
谷歌将通过自己的软件向您发送一个版本已压缩的jQuery,该版本比 MS 提供的标准压缩版本轻6kb。选择谷歌。
需要考虑的一点是,这两家公司提供略有不同的“额外”库:
根据您的需求,这可能很重要。
需要注意的是,因为ajax.microsoft.com是microsoft.com的子域名,所以请求会发送所有microsoft.com的cookies,导致获取文件的时间总体上更长。
此外,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,将另一半发送到另一个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>
这两种方法中,哪一种可能更快?
我自己也很好奇,所以我设置了一个 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
这里是第二个测试(每个测试都有3个):
视频: http://www.webpagetest.org/video/view.php?id=121019_a7b351f706cad2c25664fee7ef349371f17c4e74