CDN 可以更快地加载资源吗?

Could CDN be faster way to load resources?

我今天正在为一个博客设置管理面板,我决定只使用 CDN bootstrap link 而不是将文件保存在服务器本地,因为这只是一些初始测试。我想我稍后会把文件添加到服务器以加快速度,但那时我有了一个想法。

这个特定的服务器是一个 Bluehost 共享服务器,速度莫名其妙。如果我使用 CDN,它实际上会更快吗?它会很明显吗?

我知道 Whosebug 喜欢具体的问题,所以让我们在这个特定场景中使用 Bootstrap 的 CDN,因为它是一个流行的框架。

快速回答:在本地加载资源总是更快,因为您不依赖于网络或 CDN 服务器。你的服务器越慢,它可能比通过网络下载库更快。

Could it actually be faster if I used the CDN?

是的。 CDN 是一个不错的选择,不仅因为它们通常是非常快的服务器,而且因为当您使用流行的 CDN 时,您需要的源(例如 boostrap,jQuery)可能已经被用户从另一个站点下载了因此,将命中浏览器的缓存 - 然后尽可能快地加载。

And would it be noticeable?

这取决于当前服务器相对于 CDN 的速度有多慢。

Google DevTools 有一个有用的工具。他们有一个专门的部分:Get Started with Analyzing Network Performance in Chrome DevTools。它包括指导工具,帮助您模拟连接和设备、分析请求(找出哪些脚本加载时间更长或哪些样式表影响呈现),等等。


(来源:google.com

在上面的示例中,您可以看到下载资源实际花费了多少时间。该屏幕位于 Chrome(Command+Option+I [Mac] 或 Control+Shift+I [ Windows, Linux]).

CDN 的帮助有两个方面,

1> 离用户最近的服务器通常不受网络流量的全球等待影响。

2> 公共位置也有好处,因为资源可能缓存在来自不同网站的浏览器上。 如果您为整个站点创建一个 CSS 文件,则效果相同,用户只下载一次并缓存它 ... CDN 跨域使用此文件。这使得第一次速度测试更接近刷新后的速度测试,因为资源在到达您的站点之前就在缓存中。

例如 Twitter 使用 bootstrap 但遗憾的是它的实现很繁重并且可能与您的使用冲突。不用说使用 twitter 的好处 bootstrap 是任何使用 twitter 的人在访问您的页面时加载资源的等待时间为零。

    <link rel="stylesheet"
 href="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css" />
    <script 
src="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.0.4/js/bootstrap.min.js"></script>

如果您通过 Twitter 推广您的网站,这是一个考虑因素,因为这些访问者会看到更好的效果。 好像 bootstrap 是浏览器的本机功能。

Bootstrap 建议使用此 CDN。

<link rel="stylesheet" 
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" 
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
crossorigin="anonymous">

除非有理由不这样做,否则我会坚持他们对 CDN 的推荐。它使每个人的网站都更快。

如果您使用 CDN 作为 public 库的资源付费,您将失去第二个好处。

3> 也有可能ISP会缓存这些公共资源URL,更加拉近与用户的距离。他们这样做是为了节省带宽,这会花费他们金钱。

没有。绝不。您的生产代码应该全部在一个文件中 minified.

问题是启动 HTTP 请求是一件耗费时间的事情。每个 <script> 都会启动另一个 HTTP 会话。

出于开发目的,没关系;但在生产中,它都挤在一个单一的服务缩小包中。例如,查看 Google.com 的网络源代码并搜索 <script src= 并注意出现 0 次。