一段时间后不应该使用不可变数据的Redux应用程序耗尽内存吗?

时间:2016-08-15 11:37:30

标签: redux immutable.js

我来自嵌入式系统的背景,您对内存管理非常谨慎。 Redux特别是它的不变性概念。 所以,让我们说我正在修改一个数组的成员。我必须创建一个链接到所有原始成员和修改项目的新数组。

我理解为什么使用Immutability会提高速度但我的问题是因为我们基本上从不删除对象的旧副本并创建新的副本,因为时间旅行功能,Redux仍然保留对旧对象的引用。

现在大多数机器都有相当多的内存,但至少理论上Redux应用程序崩溃是因为选项卡/进程耗尽了内存?经过长时间的使用可能吗?

2 个答案:

答案 0 :(得分:3)

Immutable.js在创建集合的新副本时利用了结构共享的思想。它实现了持久性数据结构,并在内部使用tries等概念来实现结构共享。因此,如果您创建了包含10个项目的列表,则向其中添加新项目将不会创建新列表。

  

持久性数据结构提供了不变性的好处   保持高性能读写并呈现熟悉的   API。   Immutable.js数据结构在现代JavaScript VM上非常高效   通过哈希映射使用结构共享尝试和向量尝试为   由Clojure和Scala推广,最大限度地减少了复制或缓存的需要   数据

我建议你看看Lee Bryon,Immutable.js创作者的这个awesome talk

答案 1 :(得分:3)

没有。首先,Redux本身并不保留旧数据 - 这是Redux DevTools插件所做的事情。其次,我相信DevTools插件对它将跟踪的动作有多少限制。第三,Javascript是一种垃圾收集语言,因此不再引用的项目将被清除。 (在那里挥手,但这通常涵盖了一些事情。)