性能优化
type
status
date
slug
summary
tags
category
icon
password
Blocking
Blocked by
top
URL
Sub-item
Parent item
性能问题排查
- 数据埋点上报
- 使用控制台的NetWork、Performance等工具
- webpack-bundle-analyzer插件分析打包产物
HTTP
- gzip压缩
- 强缓存、协商缓存
- 升级HTTP版本
图片
- 图片压缩
- 图片懒加载
- 雪碧图、使用字体图标、svg
- CDN
Webpack
- 多进程打包
- 分包
- 代码压缩
- CDN
- 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页面
减少白屏时间
- 前置条件
- 性能监控指标
- APP 内点击打开页面
- DNS 解析
- 预解析
- 域名收敛
- TCP 连接
- 预连接
- 发送并响应请求
- HTTP/2
- 浏览器解析页面
- 服务端渲染
- 加载资源并渲染页面
- 骨架屏
- 资源优化
- 资源预加载
- 请求接口,获取数据并渲染
- 接口预加载
- 接口合并
大量图片加载优化策略
- 可以考虑上传到图片服务器
- 图片压缩再进行上传
- 使用懒加载(滚动加载,当滚动到可视区时再进行加载)
- 使用预加载(先将部分图片下载到本地,使用时进行替换,设定一个阀值,后面判断数据中剩余的图片阀值再进行下载)
- 在
webpack
配置图片优化策略:小于指定大小使用base64
- 如果是大量的图标,可以使用
iconfont