# 性能优化手段

加载优化:加载过程是最为耗时的过程,可能会占到总耗时的`80%时间(优化重点)

# 减少 HTTP 请求数

# 缓存资源

# 压缩代码

# 无阻塞

# JS 脚本置底加载

# inline 脚本异步执行

# CSS 放在 head 中

# 首屏加载

# 按需加载

# 预加载

# 压缩图像

# 避免重定向

# 异步加载第三方资源

执行优化:执行处理不当会阻塞页面加载和渲染

# 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秒钟内完成渲染并展示内容。