性能优化
性能优化
2023-10-15|最后更新: 2024-4-13
type
status
date
slug
summary
tags
category
icon
password
Blocking
Blocked by
top
URL
Sub-item
Parent item

性能问题排查

  1. 数据埋点上报
  1. 使用控制台的NetWork、Performance等工具
  1. webpack-bundle-analyzer插件分析打包产物

HTTP

  1. gzip压缩
  1. 强缓存、协商缓存
  1. 升级HTTP版本

图片

  1. 图片压缩
  1. 图片懒加载
  1. 雪碧图、使用字体图标、svg
  1. CDN

Webpack

  1. 多进程打包
  1. 分包
  1. 代码压缩
  1. CDN
  1. tree-sharking

html

  • css放在head中。由于同时具有 DOM 和 CSSOM 才能构建渲染树,所以HTML 和 CSS 都是阻塞渲染的资源,所以尽量精简CSS也是优化方式之一。
  • js放在body底部,减少白屏时间。因为js会阻止浏览器解析。使用defer、async
  • 减少回流和重绘制,比如不要一条一条修改DOM样式、使用documentFragment操作DOM等。

代码层面

  • 按需加载,逻辑后移,优先保证首屏内容渲染
  • 预加载
  • 复杂计算使用web worker
  • 数据缓存,对实时性不高的接口进行缓存,缓存复杂或常用的计算结果
  • 骨架屏
  • 虚拟滚动
  • 任务切片
  • 及时消除对象引用,清除定时器,清除事件监听器;
  • 减少dom 操作,利用documentFragment,尽可能合并dom操作。
  • 防抖节流
  • 组件库按需加载

第一次页面加载

减少白屏的效果和时间
  • 增加LOADING状态
  • 骨架屏
  • 图片延迟加载
  • SSR
  • CDN

首屏速度提升

  • 代码压缩,减少打包的静态资源体积(Terser plugin/MiniCssExtratplugin)
  • 路由懒加载,首屏就只会请求第一个路由的相关资源
  • 使用 cdn加速第三方库。
  • ssr 服务端渲染,由服务器直接返回拼接好的html页面

减少白屏时间

  1. 前置条件
      • 性能监控指标
  1. APP 内点击打开页面
  1. DNS 解析
      • 预解析
      • 域名收敛
  1. TCP 连接
      • 预连接
  1. 发送并响应请求
      • HTTP/2
  1. 浏览器解析页面
      • 服务端渲染
  1. 加载资源并渲染页面
      • 骨架屏
      • 资源优化
      • 资源预加载
  1. 请求接口,获取数据并渲染
      • 接口预加载
      • 接口合并
 
 

大量图片加载优化策略

  • 可以考虑上传到图片服务器
  • 图片压缩再进行上传
  • 使用懒加载(滚动加载,当滚动到可视区时再进行加载)
  • 使用预加载(先将部分图片下载到本地,使用时进行替换,设定一个阀值,后面判断数据中剩余的图片阀值再进行下载)
  • webpack 配置图片优化策略:小于指定大小使用base64
  • 如果是大量的图标,可以使用iconfont

扩展

 
webpack、vite跨域
Loading...