2016-10-09 39 views
4

我有一个仪表板应用程序,几个图表在设定的时间间隔内得到更新。我的第一个想法是更新商店中的数据,然后让所有图表从这里进行提供。Redux商店是否会导致内存泄漏?

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

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

回答

4

丹阿布拉莫夫,终极版的创造者解决这个问题here像这样:

注意,有时人们弄不清楚终极版,并假设对每一个动作,状态树已深深克隆。这绝对不是这种情况。只有更改的部分需要更改其参考。例如,如果某个操作导致数组中的某个项发生更改,实际上该项和该数组需要被复制,但是,数组中的所有其他元素将保留其身份。由于大多数时间操作都是非常有针对性的,并且会影响一些状态键,并且由于Redux鼓励规范化数据以便数据结构没有深度嵌套,所以对于典型的Web应用程序而言,这比典型的想象要少得多。

我认为这是答案的肉。

+0

这只是揭穿了这个问题中的一些假设。当然,并非整个商店都被克隆。但与可能的内存泄漏有关的是,如果引用旧状态存储与否。其他答案似乎表明,这只是开发工具的情况。 – amoebe

3

Vanilla Redux不会那样做,或者 Redux商店会泄漏。事实上,应用程序的其余部分持有对状态的引用将阻止它被清除。

例如像

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

会引起无限的内存增长。另外,一些Redux开发工具会泄漏以提供时间旅行功能,因此请确保它们已关闭以进行生产构建。

3

首先,确实听起来像一个可怕的很多数据。你的客户端应用程序实际上是需要那么多的数据呢?

二,Redux不“创建新店”。假设您按照推荐的方法更新数据,旧的数据引用将被丢弃并将被垃圾收集。默认情况下,Redux本身不会保留对旧状态树的引用,尽管Redux DevTools可以启用时间行程调试。

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

您可能还想浏览我的Redux addons catalog,其中包含可以执行批量更新等操作的插件。

相关问题