前端经常用到的性能优化手段

🚀 一、网络层面(最立竿见影)

✔ 1. 减小 bundle 大小

常见优化手段:

  • 代码分割(code splitting):路由级、组件级懒加载。

  • Tree Shaking:确保使用 ES Module,引入 antd 时用按需加载。

  • 去掉不必要 polyfill :babel/preset-env 的 useBuiltIns: 'usage'

  • 图片资源压缩:使用 webp、压缩工具(tinypng、svgo)。

  • 第三方库替换:moment → dayjs;lodash → lodash-es 或按需加载。

👉 最大收益点:减少下载体积 = 首屏速度提升非常明显。


🚀 二、渲染层面(React / Vue)

✔ 2. 减少不必要的重新渲染

React 常见方式

  • React.memo

  • useMemouseCallback(避免子组件因引用变化重渲染)

  • 避免在 render 中创建函数、对象、数组

  • 避免重复 setState(合并更新)

  • 避免在 context 中存放大对象,拆 context

Vue 常见方式

  • v-oncecomputedwatch 合理使用

  • 避免深层响应式对象反复变动

  • key 不要乱用 index 导致 diff 多做工作


🚀 三、DOM 与布局层面(浏览器渲染机制)

✔ 3. 避免频繁触发回流(Reflow)

属于性能杀手:

以下操作会触发回流/重绘:

  • 获取 offsetTop / offsetHeight / scrollTop(会强制布局)

  • 操作 DOM 频繁变动样式

  • 改变元素几何属性(宽、高、margin、padding)

优化方案:

  • 批量修改 DOM(使用 classList.add/remove 一次修改)

  • 使用 requestAnimationFrame 代替高频事件更新

  • 使用虚拟列表(大数据渲染必备)


🚀 四、图片与资源优化

✔ 4. 图片优化是前端性能的大头

  • 使用 webp、avif

  • 小图标合并雪碧图 或用 SVG

  • 图片懒加载(loading="lazy"

  • 服务端给图片做压缩(实际收益远大于前端)


🚀 五、缓存与存储

✔ 5. 缓存资源(浏览器缓存 + 本地存储)

  • HTTP 缓存(Cache-Control, ETag)

  • Service Worker 静态资源缓存(PWA)

  • localStorage/sessionStorage 预存一些不常变的数据

效果:减少重复请求,提高加载速度


🚀 六、骨架屏与懒加载(提升感知速度)

✔ 6. 骨架屏 + 分块加载

即便首屏还没加载完,也让用户感觉快:

  • 骨架屏占位

  • 组件懒加载

  • 滚动加载(infinite scroll)

  • 图片懒加载

用户感知体验提升 > 实际性能


🚀 七、大量数据与长列表优化

✔ 7. 虚拟列表(Virtualized List)

React:

  • react-window

  • react-virtualized

Vue:

  • vue-virtual-scroller

上万条数据一下子从 秒级 → 毫秒级


🚀 八、低端设备优化(动画、事件)

✔ 8. 动画优化

  • 尽量使用 transform + opacity(不会触发布局)

  • 避免频繁的 JS 动画(改用 CSS 动画)

  • requestAnimationFrame 做平滑更新

👉 transform、opacity 是浏览器能 GPU 加速的属性。


🚀 九、弱网环境(你最近问过)

✔ 9. 弱网下的优化关键

  • 请求失败自动重试(retry + backoff)

  • 分片下载、边下载边渲染

  • 合并请求减少 RTT

  • 提前预加载关键资源(prefetch/preload)

  • 超时控制(避免卡死)


🚀 十、构建工具层(Vite / Webpack)

✔ 10. 构建优化

Vite

  • 使用 esbuild 进行压缩(更快)

  • lazy loading

  • 按需构建目标浏览器

Webpack

  • 分包(SplitChunks)

  • 压缩 CSS / JS

  • preload/prefetch 插件

  • HardSourceCache


🚀 ⭐ 实际项目中收益最大的 TOP5 排行榜

按实际效果从高到低:

  1. 代码分割 + Tree Shaking(减少首屏 JS)

  2. 图片压缩 + webp

  3. React.memo / useMemo / useCallback 降低渲染次数

  4. 虚拟列表(大数据场景)

  5. HTTP/Browser 缓存

这些五项做了,一个项目能提升至少 30%--70% 的速度

相关推荐
AI浩21 小时前
【Labelme数据操作】LabelMe标注批量复制工具 - 完整教程
运维·服务器·前端
涔溪21 小时前
CSS 网格布局(Grid Layout)核心概念、基础语法、常用属性、实战示例和进阶技巧全面讲解
前端·css
2401_8784545321 小时前
浏览器工作原理
前端·javascript
西陵1 天前
为什么说 AI 赋能前端开发,已经不是选择题,而是必然趋势?
前端·架构·ai编程
by__csdn1 天前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
天天扭码1 天前
前端如何实现RAG?一文带你速通,使用RAG实现长期记忆
前端·node.js·ai编程
Luna-player1 天前
在前端中,<a> 标签的 href=“javascript:;“ 这个是什么意思
开发语言·前端·javascript
lionliu05191 天前
js的扩展运算符的理解
前端·javascript·vue.js
小草cys1 天前
项目7-七彩天气app任务7.4.2“关于”弹窗
开发语言·前端·javascript
奇舞精选1 天前
GELab-Zero 技术解析:当豆包联手中兴,开源界如何守住端侧 AI 的“最后防线”?
前端·aigc