性能优化
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 
