前端性能优化(二)

102 阅读3分钟

之前整理过一篇 浅谈 前端性能优化,时隔三月,本篇博客主要对性能优化知识进一步梳理。

所谓 web 性能优化,就是让页面访问的更快。用户输入 URL 到看到整个页面的过程发生的过程,有哪些地方可以做优化?

  • DNS解析域名
  • 发起TCP连接(三次握手)
  • 浏览器发送HTTP请求(请求体,请求头,请求体)
  • 服务器接收请求并发送响应(状态码,响应头,响应体)
  • 断开TCP连接(四次挥手)
  • 浏览器解析、渲染页面

DNS解析域名

浏览器输入网址,直到由DNS服务器解析出IP地址后,再去访问Web服务器,去获取网站资源。cdn也是在这个DNS解析的过程中起作用。

image.png

HTTP 缓存

首先请求 html,再去请求 CSS、JS。 HTTP缓存提高第二次加载的速度,查看cache-control: max-age就是过期时间。 image.png 在 max-age 时间内有版本更新,如何清理缓存的css与js?将文件以 hash 做后缀处理

image.png

注意:只能给CSS、JS、图片设置 HTTP 缓存,html永远是不缓存的。

cdn 原理

  1. 为域名开通CDN:在DNS服务器里添加CDN专用的解析记录,让域名被解析之后返回CDN网络专用服务器的IP地址。
  2. 浏览器去访问CDN网络专用服务器,会返回一个CDN负载均衡服务器的IP地址,专门用来请求设备分配合适的CDN服务器的。
  3. 负载均衡服务器会根据浏览器的IP地址,在cdn网络中寻找到一个最靠近、被分配的访问任务不多的CDN服务器,把它IP地址返回给浏览器。
  4. 浏览器访问CDN服务器,获取网络资源。

image.png

CDN 回源

在为某个域名开通CDN时,会在CDN后台进行设置(告诉cdn网络,该域名的原始Web服务器的IP地址(源站IP)),CDN节点服务器到源站拉取资源,重新设置缓存的过程叫回源。 如果这台cdn服务器上没有用户需要的网络资源,或者缓存失效,会去上一层CDN缓存服务器中去拉取,这层找不到就向上找,直到找到源站去拉取,然后在刚才经过的每一层查而不得的cdn服务器做缓存,最后由这个cdn服务器发送资源给浏览器。

增加域名

浏览器限制同域名同时最多发送一定数量的请求,就是最大并发请求数限制,当请求数过多时,会分批发送,这样就增加了等待时间。

image.png

对于这种并发限制,可以通过增加域名的方式优化。假设最大并发数为 8,那我们就把N个资源URL替换成 N/8 个不同域名,这样就有 N/8 个资源可以同时请求加载。

例如,访问淘宝时:

  • 主域名:ai.taobao.com
  • cdn域名:g.alicdn.com

image.png

访问有道写作时:

  • 主域名:write.youdao.com
  • cdn域名:shared.ydstatic.com 存放js、css、图片等小文件资源

image.png 除此之外,这样做可以实现 cookie-free。每个cookie大概是4k,cookie会随着请求上传,如果发送全部 20 个请求就是 80k,只在主域名的请求时携带Cookie,将静态资源 CSS、JS 在其他域名的请求没必要携带 Cookie.

页面渲染快

  • 优化 CSS 代码:重复的属性选择器尽量合并
  • 优化 CSS JS 加载:先加载 CSS,再加载JS(CSS放在head里,JS放在body底部)
  • 懒加载:先不加载第二屏
  • 预加载:在用户点下一页之前提前加载出来(会浪费带宽)

后端

  • 开启 gzip 压缩算法
  • keep-alive 连接复用