React+Redux性能优化与组件ShouldUpdate
React + Redux performance optimization with componentShouldUpdate
我有一个react/redux应用程序,它已经足够大,需要一些性能优化。
大约有100个独特的组件通过websocket事件进行更新。当许多事件发生时(比如大约每秒5次),浏览器开始显著减速。
大部分状态作为Immutable.js对象保存在redux存储中。整个存储区被转换为一个普通的JS对象,并通过组件树作为道具向下传递。
问题是,当一个字段更新时,整个树都会更新,我相信这是最有改进空间的地方。
我的问题:
如果整个存储通过所有组件,是否有一种智能的方法来防止组件更新,或者我是否需要为每个组件自定义shouldComponentUpdate
方法,基于它(及其子组件)实际使用的道具?
你真的不想那样做。首先,据我所知,Immutable的toJS()
相当昂贵。如果你每次都在全州范围内这样做,那是无济于事的。
其次,立即调用toJS()
几乎浪费了使用Immutable.js类型的全部好处。您确实希望在渲染函数之前保持数据的不可变包装形式,这样您就可以从shouldComponentUpdate
中的快速引用检查中获益。
第三,完全自上而下地做事通常会导致大量不必要的重新渲染。如果您在组件树中的几乎所有内容上都使用shouldComponentUpdate
,则可以绕过这一点,但这似乎太过分了。
对于Redux,推荐的模式是在组件树的不同级别的多个组件上使用connect()
(视情况而定)。这将在几个层面上简化正在完成的工作量。
你可能想通读我收集的关于React和Redux Performance的一些文章。特别是,最近关于"高性能Redux"的幻灯片非常棒。
更新:
几天前,在Reactiveflux的#Redux频道上,我与另一位Redux用户就自上而下与多个连接的问题进行了激烈的辩论。我已经复制了这个讨论,并将其粘贴在一个要点中:自上而下的单连接与多个较低连接。
此外,昨天发布的一篇文章正好涵盖了过度使用Immutable.js的toJS()
函数的主题:https://medium.com/@AlexFaunt/免疫性js-或价格-66391b8742d4。写得很好的文章。
- React重新渲染但未显示正确的组件
- 不能从angular2中的子组件指定父组件中的数组
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- React组件等待所需道具进行渲染
- 如何创建带有插槽的vue js组件预加载程序
- KnockoutJS-组件-多个实例
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何在react js中将值从一个组件发送到另一个组件
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- React组件-设置页面标题
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- 如何在salesforce aura闪电组件中使用jQuery.val()
- 为react组件传递道具的最佳方式
- [Vue warn]:未能解析组件
- 如何控制组件'的createContent函数被激发
- react组件中的绑定方法
- 如何在react js中移动第二个组件
- 多个组件是如何实现的
- 组件生命周期问题/无法处理未定义的问题
- React+Redux性能优化与组件ShouldUpdate