Comments (2)
- 1、Immutable实现的原理
Immutable实现的原理是利用结构共享形成持久化数据结构,也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。同时为了避免 deepCopy 把所有节点都复制一遍带来的性能损耗,Immutable使用了结构共享,即如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其它节点则进行共享。 - 2、Immutable的优点
- (1)节约内存
JavaScript 中的对象一般是可变的(Mutable),因为使用了引用赋值,新的对象简单的引用了原始对象,改变新的对象将影响到原始对象。为了解决这个问题,一般的做法是使用shallowCopy(浅拷贝)或 deepCopy(深拷贝)来避免被修改,但这样做造成了CPU和内存的浪费。Immutable 可以很好地解决这些问题。 - (2)Undo/Redo,Copy/Paste,时间轴等功能容易实现
因为每次数据都是不一样的,只要把这些数据放到一个数组里储存起来,想回退到哪里就拿出对应数据即可,很容易开发出撤销重做这种功能。 - (3)并发安全
Immutable Data一旦创建,就不能再被更改,也就不需要并发锁。 - 3、Immutable使用
- (1)与React搭配使用,Immutable简洁高效的判断数据是否变化,提高渲染速度及性能
- (2)与Redux/flux搭配使用
from react.
- immutable是实现Immutable data的库,这个库有大量的api可以产生不可被修改的数据,对Immutable对象的任何修改或添加删除操作都会返回一个新的Immutable对象。其实现原理是持久化数据结构,相对于深拷贝而言,通过旧数据来创建新数据的时候,只修改发生变化的节点及其父节点,他们节点保持共享,性能更好,处理速度更快。
- 跟React配合使用能提高性能:一方面如果在state中保存了一份有深层结构的引用类型的数据,如果没有Immutable.js,则需要深拷贝一份再做修改(Object.assign及react中的setState都是属于浅拷贝)。而用Immutable.js将state中的数据包装一下,不需深拷贝就可以直接修改。另一方面由于修改后返回的是新对象,React.js只需要在oldState.obj === newState.obj这一层就能判断出obj产生了变化,不需要深入obj的深层结构。
from react.
Related Issues (16)
- 什么是高阶组件?你在工作中是如何应用的? HOT 1
- 创建React动画有哪些方式?
- 你知道的React性能优化有哪些方法? HOT 1
- 你对Fiber了解多少? HOT 1
- React Hooks工作原理?
- React和Vue的DOM-DIFF对比?
- useImperativeHandle 使用场景和原理是什么?
- 展示组件(Presentational component)和容器组件(Container component)之间有何不同?
- React 中 refs 的作用是什么?
- (组件的)状态(state)和属性(props)之间有何不同?
- React Context的优缺点
- 谈谈你对Redux的了解和应用吧
- 受控组件和非受控组件的区别 HOT 1
- 如何做国际化
- React为什么要搞Hooks,它帮我们解决了哪些问题?
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react.