009.精读 Immutable 结构共享.md
- mobx-state-tree 发布, 实现 mutable 到 immutable 数据流的转变(可变数据流到不可变数据流) 同时也是将事务性、可追溯星和依赖追踪特性的结合
- Object.assign() 作用大对象速度较慢,性能损失在"结构共享"操作需要遍历大对象的几乎所有属性,引用操作耗时长。
- 解决方法就是减少引用指向的操作数量,需要一种设计巧妙的树形结构打平的引用建立深度
vector tries
: hash 后减少树的深度,按数量打平深度,广度拉开,路径唯一,此类结构共享的核心就是以空间换时间
- 使用二叉树 将所有值按照顺序 从左到右存放于叶子节点,需要更新数据时,将其更新路径上的节点生成新的对象,没改变节点继续共用。
- ImmutableJS 对于 map 通过树宽和树高的压缩,将其压缩聚合成一个节点,移除同级的空节点(个人理解就是在 Vector trie 的基础上将没用到的叶子节点压缩去掉)
- 结构共享二者都可以实现,在庞大对象时使用后者更合适
- 性能上的确可以,但是结合 redux 使用则无法代替
-
数据结构共享真正达到可用层次,需要借助 Hash maps tries 和 Vector tries 的帮助
-
大部分情况下可以使用 Object.assgin 代替 ImmutableJS,只要不怕深度赋值的麻烦语法, 在数据量巨大的字段上模块一使用 ImmutableJs 提高性能