当前位置: 首页 > 工具软件 > Immutable.js > 使用案例 >

谈谈你对immutable.js的理解?

楚和悌
2023-12-01

Immutable.js 简介

Immutable.js是由 Facebook 工程师( Lee Byron) 花费 3 年时间打造,与 React 同期出现,虽然没有被默认放到 React工具集里,但是它的价值还是非常大的。它内部实现了一套完整的持久化数据结构( Persistent Data Structure ),还有很多易用的数据类型(像 List、Map)。有非常全面的函数式操作方法( 像map、get、getIn、set、setIn、merge)。同时 API 也尽量与原生Js的 Object 和 Array 类似。

Immutable.js 原理

Immutable Data 就是一旦创建,就不能再被更改的数据。对 Immutable 对象的任何修改、添加或删除操作都会返回一个新的 Immutable 对象。
Immutable 实现原理是持久化数据结构(Persistent Data Structure),也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。
为了避免深度拷贝(deep Copy)把所有节点都复制一遍带来的性能损耗,Immutable 使用了共享结构(Structural Sharing),即如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其它节点则进行共享。

Immutable的优点和缺点

优点

1、降低Mutable带来的复杂度
原生Js的引用赋值虽然可以节省内存,但当应用复杂后,可变状态就会变成噩梦,通常一般的做法使用浅拷贝和深拷贝可以解决,但是这样造成了CPU和内存的消耗,Immutable可以很好的解决这些问题。
2、节省内存空间
前面提到的结构共享,Immutable.js使用这种方式会尽量的复用内存。
3、随意穿梭
因为每次数据都不一样,只要把这些数据放到一个数组中存起来,就可以作回退操作,很容易开发出撤销和回退的功能。
4、拥抱函数式编程
Immutable(持久化数据结构)本身就是函数式编程的概念,纯函数式编程比面向对象更适用于前端开发。因为只要输入一致,输出必然一致,这样开发的组件更易于调试和组装。

缺点

1、学习成本
2、需要额外引入资源文件
3、使用过程中容易与原生对象混淆

总结一下,什么时候该用Immutable?

首先得看你的项目中,深拷贝得需求量,如果整个项目也就那么三五个地方当需要用,那完全没必要用。用JSON的方法就可以了,或者自己用递归封装一个深度拷贝的方法。

上文中提到别人做的那个实验,Immutable耗时短,得看前提,他的前提是1M得数据,拷贝500份,平常项目中得数据一般都很小,如果深拷贝用到的少,完全可以不用Immutable。如果用到的多,可以考虑用。比如react项目中,不允许直接改变state的值,这时用Immutable就很合适。

还有就是特殊功能的项目,比如说上面提到的优点第3条,项目需要做回退操作或撤销操作的功能,用Immutable实现很方便。

 类似资料: