# 性能优化手段
加载优化:加载过程是最为耗时的过程,可能会占到总耗时的`80%时间(优化重点)
# 减少 HTTP 请求数
# 缓存资源
# 压缩代码
# 无阻塞
# JS 脚本置底加载
# inline 脚本异步执行
# CSS 放在 head 中
# 首屏加载
# 按需加载
# 预加载
# 压缩图像
# 减少 Cookie
# 避免重定向
# 异步加载第三方资源
执行优化:执行处理不当会阻塞页面加载和渲染
# CSS 写在头部,JS 写在尾部并异步
# 避免 img、iframe 等的 src 为空
空 src 会加载当前页面,影响速度和效率
# 避免重置图像大小
减少因图片大小重置造成的多次重绘
# 图像尽量避免使用 DataURL
渲染优化
# 设置 viewport
加速页面渲染
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
# 减少 DOM 节点
# 优化动画
- 尽量使用 CSS3 动画
- 合理使用 RequestAnimationFrame 动画代替 setTimeout
- 适当使用 Canvas 动画:5 个元素以内使用 CSS 动画,5 个以上使用 Canvas,也可使用 WebGL
# 优化高频事件
- 函数节流
- 函数防抖
- 使用 requestAnimationFrame 监听帧变化
- 增加相应变化的时间间隔:减少重绘次数
# GPU 加速
样式优化
# 避免在 HTML 中书写 style
# 避免 CSS 表达式
# 移除 CSS 空规则
# 正确使用 display
- display:inline后不应该再使用float、margin、padding、width和height
- display:inline-block后不应该再使用float
- display:block后不应该再使用vertical-align
- display:table-*后不应该再使用float和margin
# 不滥用 float
# 不滥用 web 字体
# 不声明过多的 font-size
# 值为 0 时不需要任何单位
# 标准化各种浏览器前缀
- 无前缀属性应放在最后
- CSS动画属性只用-webkit-、无前缀两种
- 其它前缀为-webkit-、-moz-、-ms-、无前缀四种:Opera改用blink内核,-o-已淘汰
# 避免让选择符看起来像正则表达式
脚本优化
# 减少重绘和回流
- 避免不必要的DOM操作
- 避免使用document.write
- 减少drawImage
- 尽量改变class而不是style,使用classList代替className
# 缓存 DOM 选择和计算
# 缓存 length 值
# 尽量使用 事件代理
# 尽量使用 id 选择器
# touch 事件优化
2-5-8 原则
# 2-5-8 原则
- 用户在2秒内得到响应,会感觉页面的响应速度很快 Fast
- 用户在2~5秒间得到响应,会感觉页面的响应速度还行 Medium
- 用户在5~8秒间得到响应,会感觉页面的响应速度很慢,但还可以接受 Slow
- 用户在8秒后仍然无法得到响应,会感觉页面的响应速度垃圾死了
# 3秒钟首屏指标
此规则适用于移动端,顾名思义就是打开页面后3秒钟内完成渲染并展示内容。