宝哥软件园

完整的不可变. js详细描述

编辑:宝哥软件园 来源:互联网 时间:2021-11-01

什么是不可变数据?

不可变数据是指一旦创建就不能更改的数据。

通过使用不可变数据,我们可以轻松处理缓存、回滚和数据更改检测等问题,并简化我们的开发。

js中的不可变数据在javascript中,我们可以通过深度克隆来模拟不可变数据,即每次对数据进行操作时,深度克隆都会生成一个新的数据。

深度克隆

/** *学习-不可变-克隆-deep.js *由mds在15/6/6创建。*/“使用严格的”;var clone deep=required(' lo dash . clone deep ');var data={ id: 'data ',author: { name: 'mdemo ',github : ' https://github.com/demo hi ' } };var data1=cloneDeep(数据);console.log('equal: ',data 1===data);//false data 1 . id=' data 1 ';data 1 . author . name=' demo hi ';console . log(data . id);//数据console . log(data 1 . id);//data 1 console . log(data . author . name);//mde mo console . log(data 1 . author . name);//当然,demohi,你可能会意识到,这是非常缓慢的。如下图,真的很慢。

主角immutable.js登场
不可变. js是facebook推出的开源项目,主要是解决javascript不可变Data的问题,通过参考hash map try和vector tries提供了一种更有效的方式。

简而言之,不可变. js通过结构共享解决了的性能问题。我们先看一个视频,看看不可变. js是怎么做到的。

当我们有一个set操作时,不可变的. js将只克隆其父级以上的部分,其余部分保持不变,这样每个人都可以共享同一个部分,大大提高了性能。

从10到1010熟悉React.js的人应该都知道React.js是一个UI=f(states)的框架。为了解决更新问题,React.js使用虚拟dom,通过diff修改dom,实现高效的dom更新。

听起来很完美,但有一个问题。当状态更新时,如果数据保持不变,还会做虚拟dom的diff,这样会导致浪费。其实这种情况很常见,可以参考flummox的文章。

当然,你可能会说,你可以用purerendemin来解决。PureRenderMixin是一个好东西,我们可以用它来解决上面的一些问题,但是如果你注意的话,可以在文档中看到下面的提示。

复制代码如下:这个只是浅显的比较对象。如果它们包含复杂的数据结构,可能会因为更深层次的差异而产生假阴性。只混合到具有简单道具和状态的组件中,或者在知道深层数据结构已经改变时使用forceUpdate()。或者,考虑使用不可变对象来促进嵌套数据的快速比较。

PureRenderMixin只是一个简单的浅层比较,并不用于多层比较。然后呢?如果你自己做一个复杂的比较,你的表现会很差。

解决办法就是用不可变的. js来解决这个问题。因为状态更新中每次有数据变化,PureRenderMixin都可以立即判断数据变化,可以大大提高性能。这部分也可以参考官方文件不变性助手。

总结一下:使用purerendrmixin不可变. js。

为什么你要在React.js中使用Immutable Data
React.js Conf 2015 -不可变的数据和反应

不变性助手

PureRenderMixin

不可变js

更多资讯
游戏推荐
更多+