前端性能优化到底在优化什么?怎么优化

“春江水暖鸭先知,产品好坏客户知”,作为前端开发,我们更注重客户体验,产品的好坏决定着客户的体验,那么一款产品的好坏有很多因素,其中性能是决定因素,那么怎么优化才能让产品的性能达到优良,让客户体验良好,今天我就带大家去了解学习前端性能优化 。
 

前端性能优化到底在优化什么?怎么优化

文章插图
 
 
优化的目的优化的目的在于让页面加载的更快,对用户操作响应更及时,为用户带来更好的用户体验,对于开发者来说优化能够减少页面请求数,能够节省资源 。
前端优化的方法有很多种,可以将其分为两大类,第一类是页面级别的优化如http请求数,内联脚本的位置优化等,第二类为代码级别的优化,例JAVAscript中的DOM 操作优化、css选择符优化、图片优化以及 html结构优化等等 。
优化哪些?那么我们需要优化那些点呢?
  1. 加载资源优化
  2. 渲染优化
  3. 浏览器缓存策略
  4. 图片优化
  5. 节流与防抖

前端性能优化到底在优化什么?怎么优化

文章插图
 
加载资源优化说起加载,当我们输入URL时,我们要知道这中间发生了什么?
  • 首先做 DNS 查询,如果这一步做了智能 DNS 解析的话,会提供访问速度最快的 IP 地址回来
  • 接下来是 TCP 握手,应用层会下发数据给传输层,这里 TCP 协议会指明两端的端口号,然后下发给网络层 。网络层中的 IP 协议会确定 IP 地址,并且指示了数据传输中如何跳转路由器 。然后包会再被封装到数据链路层的数据帧结构中,最后就是物理层面的传输了
  • TCP 握手结束后会进行 TLS 握手,然后就开始正式的传输数据
  • 数据在进入服务端之前,可能还会先经过负责负载均衡的服务器,它的作用就是将请求合理的分发到多台服务器上,这时假设服务端会响应一个 HTML 文件
  • 首先浏览器会判断状态码是什么,如果是 200 那就继续解析,如果 400 或 500 的话就会报错,如果 300 的话会进行重定向,这里会有个重定向计数器,避免过多次的重定向,超过次数也会报错
  • 浏览器开始解析文件,如果是 gzip 格式的话会先解压一下,然后通过文件的编码格式知道该如何去解码文件
  • 文件解码成功后会正式开始渲染流程,先会根据 HTML 构建 DOM 树,有 CSS 的话会去构建 CSSOM 树 。如果遇到 script 标签的话,会判断是否存在 async 或者 defer ,前者会并行进行下载并执行 JS,后者会先下载文件,然后等待 HTML 解析完成后顺序执行,如果以上都没有,就会阻塞住渲染流程直到 JS 执行完毕 。遇到文件下载的会去下载文件,这里如果使用 HTTP 2.0 协议的话会极大的提高多图的下载效率 。
  • 初始的 HTML 被完全加载和解析后会触发 DOMContentLoaded 事件
  • CSSOM 树和 DOM 树构建完成后会开始生成 Render 树,这一步就是确定页面元素的布局、样式等等诸多方面的东西
  • 在生成 Render 树的过程中,浏览器就开始调用 GPU 绘制,合成图层,将内容显示在屏幕上了
我们从输入 URL 到显示页面这个过程中,涉及到网络层面的,有三个主要过程:
  • DNS 解析
  • TCP 连接
  • HTTP 请求/响应
这里我们就不用去管DNS解析和TCP链接了,毕竟不是我们的事,也干不来,但是HTTP请求和响应是我们优化的重点 。
【前端性能优化到底在优化什么?怎么优化】HTTP优化可分为两个方面:
  • 尽量减少请求次数
  • 尽量减少单次请求所花费的时间
减少请求数:
  • 合理的设置http缓存,恰当的缓存设置可以大大减少http请求 。要尽可能地让资源能够在缓存中待得更久 。
  • 从设计实现层面简化页面,保持页面简洁、减少资源的使用时是最直接的 。
  • 资源合并与压缩,尽可能的将外部的脚本、样式进行合并,多个合为一个 。
  • CSS Sprites,通过合并 CSS图片,这是减少请求数的一个好办法
内联脚本的位置:
浏览器是并发请求的,很多时候我们会加入很多的外链脚本,而外链脚本在加载时却常常阻塞其他资源,例如在脚本加载完成之前,它后面的图片、样式以及其他脚本都处于阻塞状态,直到脚本加载完成后才会开始加载 。如果将脚本放在比较靠前的位置,则会影响整个页面的加载速度从而影响用户体验 。所以说尽可能的将脚本往后挪,减少对并发下载的影响 。


推荐阅读