首页 > 解决方案 > 不变性不是以速度为代价的吗?

问题描述

我不知道为什么我找不到这个问题的答案,但是,对于需要不变性的状态管理器,这不会导致大型状态的性能显着下降吗?我正在构建一个有趣的应用程序,它没有足够大的数组来引起问题(n 最多会达到大约一千左右,在极端情况下可能会达到几千)。

但是,假设应用程序出于某种原因必须在内存中保存大量信息。每次您必须编辑一个对象时,这意味着您必须完全重建数组。

我只是在想,也许将来我需要有状态来存储如此大量的数据,尽管我不一定能想到一个具体的例子,你需要一个状态管理器来为你处理它。我只是好奇,有没有发生这种奇怪的巨大状态假设的例子。在旁注中,我能找到的关于影响速度的不变性的唯一参考是增加它,但这是在用于比较的参考相等性的注释上。但是变异数据与是否可以比较对象的引用无关吗?

标签: javascriptredux

解决方案


您误解了不可变更新的工作原理。

正确的不可变更新不需要深度克隆所有对象。它更像是嵌套的浅层克隆。只有实际需要更新的对象集被复制,而不是全部。

如果我想更新state.items[5].completed,我需要item在索引 5、items数组和state. 数组中的所有其他对象items以及 的所有其他部分state保持不变。

复制这些对象肯定有一定的成本,但在大多数情况下,除非它们特别大,否则它没有意义。


推荐阅读