前端性能优化

前端性能优化

十一月 04, 2020

之前的一篇HTTP缓存说到了从用户输入url到页面渲染的整个过程和http的缓存实现方式,在此基础上我们从多个方面对页面性能进行优化。

一. DNS解析优化

​ 我们可以通过购买好的域名解析服务来达到快速解析DNS的目的,可以保证我们的网站可以更高效和稳定的提供访问服务。

二. 资源压缩(是否合并根据HTTP版本来确定)

​ 主要包含HTML,CSS和JavaScript以及其他资源文件的压缩,节省带宽,加快访问,一般都是通过Webpack或者其他打包工具来完成。

  • HTTP1

    HTTP1主要因为一个连接一次只能处理一个请求,并且浏览器有并发请求限制,所以前端的优化手段主要是合并文件,保证请求越少越好,比如合并文件,雪碧图,在此基础上进行域名分片,以达到减少请求阻塞的目的。

  • HTTP2

    HTTP2由于采用了IO多路复用,一个连接可以处理多个请求,所以我们的优化手段主要是减少文件大小。

打包的时候我们一般都会进行Vendor(依赖包,版本不动基本不会变动)和Chunk(我们自己写的代码)分离,一方面是为了更好的利用浏览器缓存,另一方面则是为按需加载做铺垫,达到更好的加载效果。

三. 非核心代码按需加载

​ 除了核心代码以外,保证每访问一个页面都只加载当前页面需要的资源,而不是在首屏访问时全部加载,比如在配置Router文件的时候懒加载,只有访问的时候才去加载。

四. 合理利用浏览器缓存

​ 上一片文章介绍了强缓存和协商缓存,我们应该合理的进行运用:

  • 变动不多的资源

    比如静态资源文件,我们可以使用强缓存,利用Cache-ControlMax-age=xxxx使其在一段时间内可以利用缓存,如果服务端发生变动,我们打包的时候一般都会生成hash码,也就相当于路径变化,会去请求最新的资源。

  • 变动频繁的资源

    比如一个频繁写入的文件,我们可以使用协商缓存,利用ETag字段来做缓存处理。

五. 使用CDN

​ 浏览器缓存始终只是为了做二次缓存,对于首次访问加速,除了按需加载外,我们可以通过CDN加速访问,通过将资源部署到离用户最近的服务节点上以达到快速访问目的。

六. 预解析

​ 资源预加载可以告诉浏览器未来会加载哪些内容,通过提前加载的方式来加快访问速度。比如我们的图片或者文件等资源是单独部署在一个服务器上,这时候我们可以在HTML顶部加入以下标签通过提前解析DNS的方式加快访问:

1
<link rel="dns-prefetch" href="//example.com">

当然我们也可以预加载一些其他资源。