Skip to content

项目优化

🚀 前端页面性能优化

资源加载

1. 减少请求数与体积

  • 合并与压缩:合并小文件如CSS Sprites,压缩/删除代码注释,以及在服务端开启Gzip压缩。

  • 图片优化:使用WebP格式、使用雪碧图、压缩图片、懒加载等技术。

2.利用高效网络与缓存

  • CDN加速与HTTP/2: 利用CDN分布资源,减少延迟;启用HTTP/2协议,实现多路复用,提高并发性能。

  • 强缓存策略:设置Expires或Cache-Control头,利用浏览器缓存静态资源,减少重复请求。

渲染与执行

1.优化关键渲染路径

  • 避免阻塞渲染:将CSS放在<head>中以保证首屏样式,将JS脚本放在<body>末尾或使用async/defer属性,防止阻塞页面解析。

  • 关键CSS内联:将首屏渲染所必需的关键CSS样式直接内嵌在HTML中,避免因请求外部CSS文件而延迟渲染。

2.减少运行时开销

  • DOM操作优化: 避免频繁操作DOM,将多次DOM操作合并为一次;使用文档片段(DocumentFragment)批量操作DOM,减少重绘重排次数。

  • 事件节流与防抖: 对scroll、resize等高频事件使用节流(throttle)或防抖(debounce),避免函数过度调用。

  • 使用事件委托: 利用事件冒泡机制,将事件监听器绑定在父元素上,统一处理子元素的事件,减少内存占用。

⚙ 打包构建优化

参考 如何优化webpack的构建速度

重绘和回流

  • 回流:当渲染树种的一部分或者全部元素因尺寸、布局、隐藏等属性改变而需要重新进行构建,这个过程称为回流(Reflow),也叫重排。回流会导致浏览器重新计算元素的位置和大小,从而影响页面的渲染性能。

  • 重绘:当元素的外观属性(如颜色、背景色、可见性)发生改变,但不影响其布局时,浏览器会执行重绘(Repaint)。重绘的代价小于回流,因为它不需要重新计算几何属性。

优化要点

1. 减少回流:避免频繁操作样式,最好一次性更改(如通过el.style.cssText或修改CSS类名)。减少直接操作DOM,尤其是在循环中。对于复杂动画,使用position: absolute或fixed使其脱离文档流。先隐藏元素(display: none),进行多次修改,然后再显示。

2. 减少重绘:利用浏览器的事件循环机制,将多次DOM读写操作合并(Vue/React的异步更新队列已帮我们做了很多优化)。注意那些会触发回流或重绘的CSS属性(如offsetTop, scrollTop等),避免频繁读取。

相关注释

多路复用

HTTP/2 允许在同一个TCP连接上同时发送多个请求和响应,而不是像HTTP/1.1那样每个请求都需要建立一个新的连接。这大大提高了并发性能,减少了延迟。