【发布时间】:2019-05-31 14:04:58
【问题描述】:
我支持基于 React 的 CMS,但我遇到了性能问题,即添加 10 个新输入字段会使浏览器处理时间增加 1 秒。这不是我的代码,而且我没有使用 React 的经验。我有分析经验,并且大致了解渲染引擎的工作原理。
我已经挂钩了 ReactCompositeComponent._updateRenderedComponent 函数来查看主要性能瓶颈在哪里,不同之处似乎是我得到了很多点击。添加 40 个带有日历输入的中继器项目会导致这种性能差异(表单必须支持超过 200 个输入,目前需要 20 秒):
- div:250 毫秒 -> 1600 毫秒,1300 次点击 -> 8100 次点击
- ConnectedField(props):20 毫秒 -> 370 毫秒,70 次点击 -> 2300 次点击
- Calendar():10 毫秒 -> 300 毫秒,20 次点击 -> 1200 次点击(但我只添加了 40 个日历输入)
- ConnectedFieldArray():30 毫秒 -> 250 毫秒,200 次点击 -> 1300 次点击
是什么原因导致只添加了几个元素就获得了如此多的点击量?
这是 Chrome DevTool 分析图(点击查看完整尺寸):
【问题讨论】:
-
添加 shouldUpdateComponent 和 react-fast-compare isEqual 帮助我减少了大约 30% 的性能。总点击数从 28000 次点击减少到 8000 次点击,处理时间从 7.5 秒减少到 5 秒。
标签: javascript reactjs performance profiling