客户端优化

静态资源优化

  • 使用构建工具对HTML,CSS,JS压缩,删除生产环境下的无用代码(比如注释,打印信息等)。

  • 提取公共资源,减少代码体积。

  • 外链CSS和JS文件,外链的文件可以放到CDN,服务器和浏览器会进行缓存。

  • 使用雪碧图,减少http请求数。

  • 使用字体图标iconfont:

  • 图片使用webp格式

  • 缓存(Service Worker)

网络请求优化:

  • 使用get进行请求,get会缓存请求,比起post,只发送一个tcp包,效率更好。

  • 合并请求数量,减少http请求次数,节省网络请求时间。

  • 多次请求和关闭会造成服务了压力,浏览器对每次请求的数量都有限制,一般是每次只能3次左右,合并请求将加快速度。
  • 抛开无用cookie,减少带宽占用,http协议每次发送请求都会自动带上该域名及父级域名下的cookie

浏览器缓存

强缓存,协商缓存(根据相应的header内容来决定的)
缓存参考文章

https://juejin.im/post/5b3c87386fb9a04f9a5cb037

页面渲染速度优化(用户体验优化)

  • css放在顶部,优先渲染。
  • js放在底部,避免堵塞,减少白屏时间和首页渲染时间。
  • 减少DOM数量,减少重排重绘。
  • Virtual Dom。
  • 预加载和懒加载。
  • 骨架屏。

避免JS堵塞

重排重绘

  1. 重排(reflow):渲染层内的元素布局发生修改,都会导致页面重新排列,比如窗口的尺寸发生变化,删除或添加DOM元素,修改了影响元素盒子大小的css属性(width,height,padding)

  2. 重绘(repain):所以对元素的视觉表现属性的修改,都会引发重绘

避免重排重绘:

Virtual Dom

服务器优化

  • 使用内容分发网络CDN 客户端可以通过最佳的网络链路加载静态资源。
  • 开启Gzip压缩文件内容。
  • 为文件头指定expires和cache-control。
  • 对于静态内容,设置文件头过期事件,expires的值为永不过时(never expire)。
  • 对于动态内容,使用恰当的cache-control文件头来帮助浏览器进行有条件的请求。
  • 升级到HTTPS,才能开启http2和PWA功能。

Gzip压缩

CDN(内容分发网络)

HTTPS VS HTTP

HTTP2新特性

1.新的二进制格式

2.多路复用

3.header压缩

4.服务器推送 server push

代码优化

流程控制

  • 避免使用for…in(它能枚举到原型,所以很慢)
  • 使用Map表代替大量的if-else和switch会提升性能和代码可阅读和维护性。
  • 函数的防抖节流

  • 事件委托的优点

  • hidden

效率优化

  • 易拓展,易维护,易维护的代码(函数式编程),快速定位Bug。

  • 引入Webpack,Rollup,Parcel等自动化构建工具

线上环境优化

错误监控

自动化构建、持续集成

工具

网络传输性能检测工具 –page Speed(Chrome下载拓展插件Page Speed)它会对测试网站的性能瓶颈提出完整的建议,我们可以根据它的提示进行优化工作。

原文:大专栏  前端性能优化


02-12 08:24