在聊immutable之前我们先思考一个问题。敲代码时经常会使用深拷贝的方法,但是一般的深拷贝方法是把所有的数据节点都拷贝下来,此时没有改变的数据也会被拷贝一份。这就会造成性能的消耗。我们该如何解决性能消耗问题。
此时我们就需要一个结构共享的方案。什么是结构共享?简单来说在拷贝时,我们拷贝改变的数据节点极其父节点,而没有改变的数据我们就直接拿过来,不进行拷贝,这就是结构共享。而在项目中我们就需要immutable这个工具来实现结构共享。
Immutable数据是一个不可变数据,就是一旦创建,就不能再被更改的数据。对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象。Immutable 实现的原理是持久化数据结构),也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。同时为了避免 深拷贝把所有节点都复制一遍带来的性能损耗,Immutable 使用了 结构共享,即如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其它节点则进行共享。
下面我们来聊一下用法:
安装:
npm install immutable
使用Map
引入:
const { Map } = require('immutable');
- 当数据为一个对象数据类型时,我们使用Map。
- Map类似于ES6中的map。它有两个方法get和set。
- 通过set去赋值,通过get去获取。
使用List
引入:
const { List } = require('immutable');
- 当数据为一个数组数据类型时,我们使用List
- 使用方法同Map
const list1 = List([1, 2]);
const list2 = list1.push(3, 4, 5);
const list3 = list2.unshift(0);
const list4 = list1.concat(list2, list3);
assert.equal(list1.size, 2);
assert.equal(list2.size, 5);
assert.equal(list3.size, 6);
assert.equal(list4.size, 13);
assert.equal(list4.get(0), 1);
//equal是用来判断内容是否相等
注意:List是拥有原生数组的所有方法的。