前端最全面的性能优化

128 阅读3分钟
  • 减少总体加载时间:减少文件体积,减少 HTTP 请求数量、使用预加载
  • 使网站尽快可用:仅加载首屏内容,其他内容根据需要进行懒加载
  • 平滑和交互性:使用 css 动画代替 js 动画、减少 UI 重绘
  • 感知表现:耗时操作要给用户反馈,比如 loading 动画、进度条、骨架屏等提示信息
  • 性能测定:性能指标、性能测试、性能监控持续优化

性能指标

  1. First Contentful Paint(FCP)
  2. Largest Contentful Paint(LCP)
  3. First Input Delay(FID)
  4. Time to Interactive(TTI)
  5. TBT(Total Block Time)总阻塞时间,度量了 FCP 和 TTI 之间的总时间
  6. CLS(Cumulative Layout Shift)累计布局偏移
  7. Speed Index(SI)速度指数,是一个表示页面可视区域中内容的填充速度的指标,可以通过计算页面可见区域内容显示的平均时间来衡量。
  1. 加载性能(LCP) 显示最大内容元素所需时间
  2. 交互性(FID) 首次输入延迟时间
  3. 视觉稳定性(CLS) 累计布局偏移

响应(Response)动画(Animation)空闲(Idle)加载(Load)

性能测量:

灯塔(Lighthouse)

image.png

浏览器 DevTools 调试工具

快捷键 Shift + ESC 了解 GUP、网络和内存空间的使用情况。通过监控这些数据,我们可以在有异于其他进程的大幅开销出现时,定位到可能存在内存泄漏或网络资源加载异常的问题进程。

  • cup大:可能大数据操作或内存泄漏
  • 内存空间大:资源占比大

Network 网络

分析资源加载耗时情况 image.png

performance 性能控制面板

大数据量的js动画,cpu占用高,造成卡顿,控制面板能显示实时的数据帧率 控制面板红色的地方会显示强制重排,存在性能瓶颈 可以将js动画改成css动画,帧率会降低,60

memory面板

image.png

coverage面板

image.png

前端页面生命周期

image.png

image.png

网络请求的进程与线程

多进程浏览器 image.png

建立http请求

dns解析

image.png

网络模型

image.png

tcp连接

  • 在吗?
  • 在的,怎么了?
  • 一起出去玩
  • 确认对方的存在在进行通信 image.png

image.png

前后端的交互

反向代理服务器

tcp建立连接后,就可以通过http进行前后端通信了,可能会存在反向代理

image.png

后端处理流程

image.png

http协议相关

image.png

浏览器的缓存

image.png

关键路径渲染

将html,css解析转成如下 image.png

image.png

优化方案

从发出请求到收到响应的优化,比如 DNS 查询、HTTP 长连接、HTTP2、HTTP 压缩、HTTP 缓存等

更好的连接传输效率:

  1. 减少dns查找
  2. 使用tcp持久化优化
  3. 减少http重定向:需要额外的dns查找+tcp握手

更少的资源请求 压缩:图片压缩,gzip 缓存:http缓存,cdn缓存,service worker缓存

image.png

image.png

渲染优化

资源加载优化

图片优化

关键渲染路径优化,比如是否存在不必要的重绘和回流 加载过程的优化,比如延迟加载,是否有不必需要在首屏展示的非关键信息,占用了页面加载的时间 资源优化,比如图片、视频等不同的格式类型会有不同的使用场景,在使用的过程中是否恰当 构建优化,比如压缩合并、基于 Webpack 构建优化方案等

image.png