为什么要使用cdn
雅虎军规有一条规则建议我们是用cdn。随便在网上搜索,可以找到使用的cdn的好处。
再次强调第一条黄金定律,减少网页内容的下载时间。提高下载速度还可以通过CDN(内容分发网络)来提升。CDN通过部署在不同地区的服务器来提高客户的下载速度。如果你的网站上有大量的静态内容,世界各地的用户都在访问,我说的是youtube么?那CDN是必不可少的。事实上大多数互联网中的巨头们都有自己的CDN。我们自己的网站可以先通过免费的CDN供应商来分发网页资源。
cdn不只是可以让用户去请求到离自己最近的服务器,提高速度,他还有以下几个好处。
1. 防止本域名下的cookie在发送请求时被带过去。
如果在network下看过页面的请求,可以发现,即使是请求一张jpg的图片,也会发送同域下的cookie过去。即便是不到几k的大小,用户量大了,也是一个巨大的消耗。不论是出于加载速度还是宽带的考虑,都应该避免这种情况。这也是静态cdn的域名不与主域名一致的原因之一。
2. 防止过多请求被浏览器限制。
浏览器同域名的请求是有最大并发限制的,一般是6个。具体可以参考这篇博客。这是cdn的域名不与主域名一致的原因之二。
3. 方便缓存复用。
如果是同一个静态文件,在多个页面被加载,如果在cdn上,被客户端缓存下来,那么再打开另一个页面,也不需要再去请求,可以直接使用缓存。
说点别的
说到了cdn,就想到了一些平时开发时约定俗成的习惯。
dns预解析
估计大部分同学都会有一个文件存满了诸如以下的内容:
<meta http-equiv="x-dns-prefetch-control" content="on" />
<link rel="dns-prefetch" href="http://img.jd.com" />
<link rel="dns-prefetch" href="http://static.jd.com" />
公司常常会有很多个静态资源的域名,有的时候,页面下的静态资源很可能是从许多个不同的域名下加载的。而域名解析为主机也需要时间,这时,如果我们使用dns预解析,可以加快资源的请求速度。
这需要浏览器的支持,目前主流浏览器全部支持。
合理利用缓存
雅虎军规第一条————减少http请求。
实际开发中,雪碧图、压缩捆绑css、js是我们常用的方式。但是在客户端能力越来越强的如今,其实不一定非要这么做。
举个例子,如今客户端会缓存大部分静态资源在本地,加上并发请求的原因,多个文件反而能更好的利用客户端的能力。
我认为,在项目上线时,尽可能找到复用较多的资源,单独拿出来,项目专享的js和css打包成一个文件,不失为一个更好的选择。
以上是我个人的一些理解,如有不对,敬请指教。