前端性能

70 阅读2分钟

性能指标:

  • FCP 关键页面要求1.5s以内,一般2s以内
  • LCP 关键页面2s以内,一般页面2.5以内
  • CLS 0.1 以内
  • FID 100ms以内 (新指标 web vitals)
  • Lighthouse 总评分在

性能优化--获取资源

加快网络

  1. CDN
  2. preload(这个本来不算加快网络,但是能提前发起资源的获取)
  3. prefetch
  4. preconnect
  5. dns-prefetch
  6. 客户端提前缓存dns或者使用httpdns
  7. http2:多路复用、头部压缩、服务端推送

减小资源大小

  1. gzip
  2. 代码分割(代码使用情况performance、coverage);只加载当前页面用到的代码;甚至开始只加载满足首屏和必要功能的代码,再按需加载。
  3. esm 的Tree shaking
  4. 图片按需lazyload;尽量webp;使用合适尺寸的图片;尽可能利用 CSS3 效果代替图片
  5. iconfont
  6. 减少 Cookie 大小,静态资源使用无cookie的域名

缓存

  1. cache-control、etag、last-modify
  2. service-worker
  3. 第三方库单独缓存

性能优化--运行时

  1. css放head,js放在body最后;减少重绘、重排;排除可能因为js加载导致停止解析html
  2. 代码中尽量减少强制回流(可从performance面板中看到强制回流的信息)
  3. react开发中采用必要技巧,减少不必要的组件更新
  4. web-worker, 部分单独开一个线程处理,缓解主线程的压力
  5. 尽量减少dom元素嵌套层级,提高css的准确性
  6. 数据预加载(可以和服务员约定规则或者直接使用http2)
  7. 动画元素(变化频率高的元素),给单独的渲染层,translate3d、will-change
  8. 骨架屏(糊弄用户)
  9. 尽可能使用css3动画效果,而不是js的
  10. 合理使用requestAnimationFrame处理动画
  11. flexbox布局性能好
  12. 降低 CSS 选择器的复杂性

听取performance建议,就可以再首屏时做的很好