一段时间后,具有不可变数据 运行 的 Redux 应用程序不应该内存不足吗?

Shouldn't a Redux app with immutable data run out of memory after a while?

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

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

现在大多数机器都有很多内存,但至少在理论上 Redux 应用程序不应该因为 tab/process 内存不足而崩溃?也许是用了很久?

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

Persistent data structures provide the benefits of immutability while maintaining high performance reads and writes and present a familiar API. Immutable.js data structures are highly efficient on modern JavaScript VMs by using structural sharing via hash maps tries and vector tries as popularized by Clojure and Scala, minimizing the need to copy or cache data.

我建议您观看 awesome talk Lee Bryon 的 Immutable.js 创作者

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