Redux存储会导致内存泄漏吗?



我有一个仪表板应用程序,其中有几个图表在设定的间隔内更新。我的第一个想法是更新商店中的数据,然后让所有的图表从那里输入。

但是这会导致内存泄漏吗?因为Redux每次数据更改时都会创建一个新的存储,并保留旧的存储。每秒大约2mb的数据会堆积起来并使应用程序崩溃吗?

我看到的替代方法是将数据保持在本地状态(使用setState)。我希望一些更有经验的React/Redux开发者能在这方面给我一些建议。谢谢!

Dan Abramov, Redux的创建者在这里这样解决这个问题:

请注意,有时人们会对Redux感到困惑,并假设在每个操作中,状态树必须被深度克隆。这绝对不是事实。只有更改的部分需要更改其引用。例如,如果一个操作导致对数组中的一个项进行更改,则确实需要复制该项和数组,但是,数组中的所有其他元素将保留其标识。因为大多数时候动作都是非常有针对性的,只会影响几个状态键,而且Redux鼓励规范化数据,这样数据结构就不会嵌套得很深,所以对于典型的web应用程序来说,这个问题比人们想象的要小得多。

我认为这是答案的核心。

"由于Redux在每次数据收费时都会创建一个新存储并保留旧存储。"

Vanilla Redux不会这样做,否则每个 Redux存储都会泄漏。实际上,应用程序中持有状态引用的其他部分将阻止它被清除。

例如

window.states = []
store.subscribe(() => {
  window.states.push(store.getState())
})

将导致内存无限增长。

此外,一些Redux开发工具确实泄漏了时间旅行功能,因此请确保在您的生产构建中关闭它们。

首先,听起来像是大量的数据。您的客户端应用程序真的经常需要那么多的数据吗?

第二,Redux不"创建新的存储"。假设您遵循了推荐的更新数据的方法,那么旧的数据引用将被丢弃并被垃圾收集。默认情况下,Redux本身不保留对旧状态树的引用,尽管Redux DevTools为了启用时间旅行调试而这样做。

您可能需要通读Redux文档中的几个部分。具体请参见http://redux.js.org/docs/faq/Performance.html、http://redux.js.org/docs/recipes/StructuringReducers.html。

您可能还想浏览我的Redux插件目录,其中包括可以执行批处理更新等操作的插件。

不建议在用户浏览器上每秒堆积2MB的数据。Redux存储是浏览器上的客户端。据我所知,关于内存泄漏问题的另一部分并没有发生。以下是一些有用的链接:

使用Chrome devtools诊断内存泄漏

需要注意的四种类型的内存泄漏

相关内容

  • 没有找到相关文章

最新更新