Ilj*_*lja 28 javascript immutability reactjs redux
到目前为止,大多数"起始锅炉板"和一些关于react/redux的帖子我都看到鼓励使用immutable.js来解决可变性问题.我个人依赖Object.assign或传播运算符来处理这个问题,因此在immutable.js中并没有真正看到优势,因为它增加了额外的学习,并且从用于可变性的vanilla js技术转移了一些.我试图找到切换的正当理由,但是因为我无法在这里询问为什么它如此受欢迎.
小智 32
这完全取决于效率.
持久数据结构通过始终产生新的数据结构来保持其自身的先前版本.为了避免昂贵的克隆,仅存储与先前数据结构的差异,而在它们之间共享交集.这种策略称为结构共享.因此,持久数据结构比使用Object.assign扩展运算符克隆要高效得多.
不幸的是,Javascript本身不支持持久数据结构.这就是immutable.js存在的原因,它的对象与普通的旧Javascript有很大的不同Object.这导致更冗长的代码和持久数据结构到本机Javascript数据结构的大量转换.
immutable.js的结构共享(效率)的好处何时超过其缺点(冗长,转换)?
我想,当整个数据结构的克隆和垃圾收集变得更加昂贵时,图书馆只会在拥有大量广泛对象和集合的大型项目中获得回报.
eng*_*rce 16
我已经为多个不可变库创建了性能基准,脚本和结果位于immutable-assign(GitHub项目)中,这表明immutable.js针对写操作进行了优化,比Object.assign()更快,但是,它读取操作较慢.以下是基准测试结果的摘要:
-- Mutable
Total elapsed = 50 ms (read) + 53 ms (write) = 103 ms.
-- Immutable (Object.assign)
Total elapsed = 50 ms (read) + 2149 ms (write) = 2199 ms.
-- Immutable (immutable.js)
Total elapsed = 638 ms (read) + 1052 ms (write) = 1690 ms.
-- Immutable (seamless-immutable)
Total elapsed = 31 ms (read) + 91302 ms (write) = 91333 ms.
-- Immutable (immutable-assign (created by me))
Total elapsed = 50 ms (read) + 2173 ms (write) = 2223 ms.
Run Code Online (Sandbox Code Playgroud)
因此,是否使用immutable.js将取决于应用程序的类型及其读写比率.如果你有很多写操作,那么immutable.js将是一个不错的选择.
理想情况下,您应该在引入任何性能优化之前对应用程序进行概要分析,但是,不变性是必须尽早决定的设计决策之一.当您开始使用immutable.js时,您需要在整个应用程序中使用它来获得性能优势,因为使用fromJS()和toJS()与普通JS对象互操作是非常昂贵的.
| 归档时间: |
|
| 查看次数: |
9110 次 |
| 最近记录: |