大规模JS应用程序中的Redux性能

大规模JS应用程序中的Redux性能,redux,redux-framework,Redux,Redux Framework,我最近开始研究redux,几个小时后,我就想到了关于redux在大型web应用程序中的性能的问题 我的问题是,由于redux会随着时间的推移保持应用商店以前的状态,比如说,应用程序足够大,并且随着时间的推移会有大量的状态变化,因此它不会降低应用程序的性能,因为随着时间的推移,会增加内存消耗以保持所有以前的状态吗 仅供参考:我的想法是基于垃圾收集的java背景,并在一段时间后释放未使用的内存。假设您使用不可变的数据结构,如提供的数据结构,那么在添加或更新现有数据结构时,除了跟踪引用之外,记住以前的

我最近开始研究redux,几个小时后,我就想到了关于redux在大型web应用程序中的性能的问题

我的问题是,由于redux会随着时间的推移保持应用商店以前的状态,比如说,应用程序足够大,并且随着时间的推移会有大量的状态变化,因此它不会降低应用程序的性能,因为随着时间的推移,会增加内存消耗以保持所有以前的状态吗


仅供参考:我的想法是基于垃圾收集的java背景,并在一段时间后释放未使用的内存。

假设您使用不可变的数据结构,如提供的数据结构,那么在添加或更新现有数据结构时,除了跟踪引用之外,记住以前的状态不会产生额外的成本。这是使用不可变数据结构的最大优势之一。当然,当状态更改包括用其他内容替换完整状态时,这些优势就会减弱

这就是说,您不必跟踪以前的状态,只需使用不可变的数据结构就可以更轻松、更有效地进行跟踪


另外,默认情况下,Redux不记得以前的状态,这只在Redux开发工具中使用,它提供了您想要的“时间旅行”功能。这在开发过程中非常方便。

非常感谢您消除我的疑虑,我看到了immutable.js,但没有继续深入了解它及其优点。现在我从你的答案中得到了清晰的方向和理解。再次感谢。为了清楚起见,如果你只想使用默认的javascript对象和数组,你不需要immutable.js。您只需要确保始终在减缩器中创建新值。对于对象,您可以使用Object.assign执行此操作;对于数组,您可以使用ES6数组扩展运算符。我使用您提到的方法Object.assign和扩展运算符执行了一些示例。我主要对性能有怀疑,感谢您澄清了这一点:)尽管正如您所提到的,我想用immutable做一些示例,并出于好奇尝试一下这些东西:)