为啥 Context API 在高频更新方面比 Redux 差?

Posted

技术标签:

【中文标题】为啥 Context API 在高频更新方面比 Redux 差?【英文标题】:Why Context API is worse than Redux for high frequency updates?为什么 Context API 在高频更新方面比 Redux 差? 【发布时间】:2021-07-02 10:35:33 【问题描述】:

我看到很多文章说Redux在性能上比高频更新要好,但没有具体说明原因。

是什么让人们说 Redux 在高频更新方面比 Context API 更好?

【问题讨论】:

【参考方案1】:

我在 Why React Context is Not a "State Management" Tool (and Why It Doesn't Replace Redux)、React, Redux, and Context Behavior 和 The History and Implementation of React-Redux 的帖子中广泛介绍了这一点。

总结:目前,将新值传递给<MyContext.Provider> 会强制每个 订阅该上下文的组件重新渲染。如果组件只关心 Context 值的 part 并且该部分没有改变,则没有办法解决。

此外,React 目前必须做大量工作来循环整个组件树,以确定 哪些 组件订阅了给定的上下文。

另一方面,React-Redux 依赖于对 Redux 存储的直接订阅。它在分派操作时运行您的选择器,并且仅在提取的数据发生更改时强制该组件重新呈现。因此,目前,在大多数情况下,这提供了比 Context 更好的性能,因为对于给定的更改需要重新渲染的组件更少。

React 团队一直在研究“上下文选择器”和“惰性上下文传播”的一些潜在实现,这可能有助于在未来加快速度。目前还没有发布这些内容的时间表。

【讨论】:

感谢您的回答。但是有一点,您说 Context Provider 会在每个组件的一部分发生更改时强制每个组件重新渲染。但是像 Redux 那样,是不是可以把它分成很多个 Context 来使用呢? 是的,您始终可以将事物拆分为许多较小的上下文。正如我的帖子所说,我认为这种方法很难快速维持。 (不,这与 Redux 所做的相同。)

以上是关于为啥 Context API 在高频更新方面比 Redux 差?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 context.SaveChanges() 会更新表中的每一行?

为啥我的组件在使用 React 的 Context API 和 useEffect 挂钩时会渲染两次?

我认为 PNG 在大小方面比 gif 具有更好的文件压缩率。那为啥我的 PNG 比我的 gif 大?我用pycharm转换文件

为啥令牌认证比基于 API 密钥的认证更安全?

Python Pandas:为啥 numpy 在列分配方面比 Pandas 快得多?我可以进一步优化吗?

relativeLayout.setBackground(ContextCompat.getDrawable(context, R.drawable.sample_drawable));正在使 API