javascript - 不变性不是以速度为代价的吗?
问题描述
我不知道为什么我找不到这个问题的答案,但是,对于需要不变性的状态管理器,这不会导致大型状态的性能显着下降吗?我正在构建一个有趣的应用程序,它没有足够大的数组来引起问题(n 最多会达到大约一千左右,在极端情况下可能会达到几千)。
但是,假设应用程序出于某种原因必须在内存中保存大量信息。每次您必须编辑一个对象时,这意味着您必须完全重建数组。
我只是在想,也许将来我需要有状态来存储如此大量的数据,尽管我不一定能想到一个具体的例子,你需要一个状态管理器来为你处理它。我只是好奇,有没有发生这种奇怪的巨大状态假设的例子。在旁注中,我能找到的关于影响速度的不变性的唯一参考是增加它,但这是在用于比较的参考相等性的注释上。但是变异数据与是否可以比较对象的引用无关吗?
解决方案
您误解了不可变更新的工作原理。
正确的不可变更新不需要深度克隆所有对象。它更像是嵌套的浅层克隆。只有实际需要更新的对象集被复制,而不是全部。
如果我想更新state.items[5].completed
,我需要item
在索引 5、items
数组和state
. 数组中的所有其他对象items
以及 的所有其他部分state
保持不变。
复制这些对象肯定有一定的成本,但在大多数情况下,除非它们特别大,否则它没有意义。
推荐阅读
- c# - 为什么在 app.config 中没有配置 ConsoleAppender 导致日志写入控制台?
- python - 如何使用beautifulsoup将具有多个子节点的父节点和子节点信息提取到数据框?
- typescript - 使用 TypeScript 从数组中删除具有特定 id 字段值的对象的聪明方法是什么?
- calculus - 有人愿意带我解决这个 Calculus-ii 问题吗?
- python-3.x - python中的语音识别
- python - 无法正确读取文件中的行
- c# - LINQ为每个输入返回可变数量的输出(点列表到行列表)
- python - 在python中进行可视化的groupby
- process - 仅用一行代码以最小化状态启动进程。可能吗
- python - 用python下载instagram的照片