# 前端性能优化

# 代码

# 避免重绘回流

# css

  • 使用transform代替top
  • 使用visibility 替换 display: none,前者引起重绘,后者引发回流
  • 避免使用 table 布局
  • 尽可能在 DOM 树的最末端改变 class
  • 避免设置多层内联样式,CSS 选择符从右往左匹配查找,避免节点层级过多
  • 将动画效果应用到 position 属性为 absolutefixed 的元素上,避免影响其他元素的布局
  • 避免使用 CSS表达式,可能会引发回流
  • CSS硬件加速

# js

  • 避免频繁操作样式,修改 class 最好
  • 避免频繁操作 DOM,合并多次修改为一次
  • 避免频繁读取会引发回流/重绘的属性,将结果缓存
  • 对具有复杂动画的元素使用绝对定位,使它脱离文档流

# 减少不必要代码

  • 动态import,延迟加载
  • 骨架屏

# 网络请求

# 减少请求数量

  • 合并样式与脚本
  • 使用css图片精灵

# 减少请求大小

  • gzip压缩
  • 压缩文件
  • 尽可能减小cookie的大小,并且通过将静态资源分配到其他域名下,来避免对静态资源请求时携带不必要的cookie

# 调整资源优先级

  • 对某些资源使用preload预加载,提高优先级
  • 对某些资源使用async延时加载,降低优先级
  • 初始首屏之外的图片资源按需加载
  • 静态资源延迟加载

# 网络优化

# 使用缓存

  • 缓存ajax
  • 使用CDN服务,来提高用户对于资源请求时的响应速度
  • 使用外部jscss文件以便缓存
  • 添加Expires
  • 服务端配置Etag
  • 使用serviceWorker

# 开启http2

  • 连接多路复用
  • 服务器推送必要资源