Redux商店可以导致内存泄漏吗?

nau*_*uti 8 memory-leaks reactjs redux react-redux

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

但这会导致内存泄漏吗?由于Redux每次数据更改时都会创建一个新存储,并保留旧存储.每秒~2mb的数据是否会堆积并使应用程序崩溃?

我看到的另一种方法是将数据保持在本地状态(使用setState).我希望一些更有经验的React/Redux开发人员可以就此提出建议.谢谢!

nik*_*ohn 11

丹阿布拉莫夫,终极版的创作者针对这一问题在这里,像这样:

请注意,有时人们会对Redux感到困惑,并假设在每个操作中都必须深入克隆状态树.绝对不是这样.只有更改的部分需要更改其引用.例如,如果某个操作导致更改数组中的一个项,实际上,该项和数组将需要复制,但是,数组中的所有其他元素都将保留其标识.因为大多数时候操作都是非常有针对性的并影响一些状态键,并且因为Redux鼓励规范化数据以使数据结构没有深度嵌套,所以对于典型的Web应用程序而言,这远不像人们想象的那么严重.

我认为这是答案的核心.

  • 这只是揭穿了问题中的一些假设。当然,并不是整个商店都是克隆的。但与可能的内存泄漏相关的是是否存储了对旧状态的引用。其他答案似乎表明这只是开发工具的情况。 (2认同)

Byr*_*son 8

“因为 Redux 每次数据收费时都会创建一个新存储并保留旧存储。”

Vanilla Redux 不会这样做,否则每个Redux 商店都会泄漏。事实上,应用程序的其余部分持有对状态的引用将阻止它被清理。

例如类似的东西

window.states = []
store.subscribe(() => {
  window.states.push(store.getState())
})
Run Code Online (Sandbox Code Playgroud)

会造成无界的内存增长。

此外,一些 Redux 开发工具确实会泄漏以提供时间旅行功能,因此请确保在您的生产版本中关闭它们。