
最近在优化一个中大型 React 项目,遇到了一些性能问题,想请教下各位的经验。 背景:
React 19 + TypeScript 使用了某主流 UI 组件库(Ant Design) 页面复杂度中等,有表格、表单、图表等
问题: 应用在某些场景下会有明显的卡顿感,比如:
输入框打字有延迟 列表滚动不流畅 弹窗打开/关闭有掉帧
我的疑问:
组件库的问题?
这些成熟的组件库内部实现是否会带来性能开销? 是不是应该考虑换成更轻量的组件库,甚至自己写?
React 重渲染机制?
是不是没用好 memo / useMemo / useCallback? 状态管理不合理导致大范围重渲染?
还是两者都有?
1 laikicka 1 天前 一般都是 全局状态滥用. 先用 React DevTools 看看吧. Ant Design 虽然性能比较差. 但是不太可能会有明显的卡顿感 (复杂度中等的情况下). |
2 joshua7v 1 天前 不好说,可以用 react scan 检查一下,文字输入的时候是否触发很多组件重渲染了 |
3 molvqingtai 1 天前 有试过 react compiler 吗,应该会修复一些性能问题 |
4 Baymaxbowen 1 天前 via iPhone 重复渲染吧 打开调试工具看看 |
5 ssshooter 1 天前 是一个组件写了几千行还嵌套了复杂子组件没 Memo 吧,这个情况下随便一个 setState 都会跑完整 render 就会卡 |
6 Linho1219 1 天前 via Android 去 DevTools 性能面板录一段看一下什么步骤耗时最长。你这给的信息太少了,有可能是 JS 长时间占用主线程,也可能是 reflow 太多,或者读 DOM 导致频繁的样式重算等等;另外去无痕模式试试,也有可能是插件的锅 |
7 okakuyang 1 天前 牵一发动全身,改了一个 State 结果整个树渲染一遍。 |
8 LandCruiser 1 天前 打字都卡就明显是数据的问题,可以从这个输入框绑定的变量入手排查。 |
9 codehz 1 天前 打字延迟这些你需要优化的可能是用 startTransition 等功能来降低更新重要性,但前提是你的代码支持这样的操作,不然可能会导致意外的问题(主要是由于全局状态管理的问题,大部分全局状态管理库所用的机制和并行渲染有本质上的不兼容,用 startTransition 并没有作用或者会导致数据出错) |
10 Lockroach 1 天前 看 profile 定位,列表滚动卡顿可能是网络加载或者没有列表 item 复用等原因 |
11 duan602728596 1 天前 Ant Design 还没有差到动画都掉帧的情况。我猜就是项目里面的代码写的有问题。这种情况大部分就是下个库就开始写了,连库的文档都没看过,最严重的尤其就是 Form 。 |
12 visper 1 天前 事件触发更新触发事件重复。 |
13 TingLen 1 天前 打字有延迟的话,就去拍查下 onChange 之类的函数中,是不是做了什么监听改变某个状态值,然后又没有做防抖的处理。 |
14 laved 1 天前 react19 新的 compiler 不是自动处理 memo 了吗 正常不需要自己手动加了把 |
15 FakerLeung 1 天前 LobeChat 真的卡炸了,真的没办法优化了吗? |
16 yandif 1 天前 可以试一下浏览器的性能面板,看看哪里的代码运行有性能瓶颈,然后进行优化 https://developer.chrome.com/docs/devtools/performance?hl=zh-cn |
17 lizhenda 1 天前 中大型 React 项目一旦没有强制规范很容易就变成这样 |
18 anivie 1 天前 @FakerLeung 这个项目真的第一次被 web 性能下限给吓哭了,点个设置卡了将近十秒钟才进去,我还以为是我部署错了,后面发现都是这样 ![]() |
19 lpbname777 1 天前 应该是代码写的有问题,拆分成最小单元再一步一步加 |
20 liqiuqiu 1 天前 performance 面板录制一下你的操作一看就知道怎么回事了 |
21 Jannok 1 天前 卡成这样就不是组件库的问题,是写法的问题,尤其是 antd 这种,不至于这么差的 |
22 sead 1 天前
|