最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

搞定immutable.js詳細說明

 更新時間:2016年05月02日 22:22:04   作者:mdemo  
Immutable Data是指一旦被創(chuàng)造后,就不可以被改變的數(shù)據(jù)。通過使用Immutable Data,可以讓我們更容易的去處理緩存、回退、數(shù)據(jù)變化檢測等問題,簡化我們的開發(fā)

什么是Immutable Data

Immutable Data是指一旦被創(chuàng)造后,就不可以被改變的數(shù)據(jù)。

通過使用Immutable Data,可以讓我們更容易的去處理緩存、回退、數(shù)據(jù)變化檢測等問題,簡化我們的開發(fā)。

js中的Immutable Data
在javascript中我們可以通過deep clone來模擬Immutable Data,就是每次對數(shù)據(jù)進行操作,新對數(shù)據(jù)進行deep clone出一個新數(shù)據(jù)。

deep clone

/**
 * learning-immutable - clone-deep.js
 * Created by mds on 15/6/6.
 */

'use strict'; 
var cloneDeep = require('lodash.clonedeep');

var data = { 
 id: 'data',
 author: {
  name: 'mdemo',
  github: 'https://github.com/demohi'
 }
};

var data1 = cloneDeep(data);

console.log('equal:', data1===data); //false

data1.id = 'data1'; 
data1.author.name = 'demohi';

console.log(data.id);// data 
console.log(data1.id);// data1

console.log(data.author.name);//mdemo 
console.log(data1.author.name);//demohi 

當然你或許意識到了,這樣非常的慢。如下圖,確實很慢

主角immutable.js登場

immutable.js是由facebook開源的一個項目,主要是為了解決javascript Immutable Data的問題,通過參考hash maps triesvector tries提供了一種更有效的方式。

簡單的來講,immutable.js通過structural sharing來解決的性能問題。我們先看一段視頻,看看immutable.js是如何做的

當我們發(fā)生一個set操作的時候,immutable.js會只clone它的父級別以上的部分,其他保持不變,這樣大家可以共享同樣的部分,可以大大提高性能。

為什么你要在React.js中使用Immutable Data

熟悉React.js的都應(yīng)該知道,React.js是一個UI = f(states)的框架,為了解決更新的問題,React.js使用了virtual dom,virtual dom通過diff修改dom,來實現(xiàn)高效的dom更新。

聽起來很完美吧,但是有一個問題。當state更新時,如果數(shù)據(jù)沒變,你也會去做virtual dom的diff,這就產(chǎn)生了浪費。這種情況其實很常見,可以參考flummox這篇文章

當然你可能會說,你可以使用PureRenderMixin來解決呀,PureRenderMixin是個好東西,我們可以用它來解決一部分的上述問題,但是如果你留心的話,你可以在文檔中看到下面這段提示。

復制代碼 代碼如下:

This only shallowly compares the objects. If these contain complex data structures, it may produce false-negatives for deeper differences. Only mix into components which have simple props and state, or use forceUpdate() when you know deep data structures have changed. Or, consider using immutable objects to facilitate fast comparisons of nested data.

PureRenderMixin只是簡單的淺比較,不使用于多層比較。那怎么辦??自己去做復雜比較的話,性能又會非常差。

方案就是使用immutable.js可以解決這個問題。因為每一次state更新只要有數(shù)據(jù)改變,那么PureRenderMixin可以立刻判斷出數(shù)據(jù)改變,可以大大提升性能。這部分還可以參考官方文檔Immutability Helpers

總結(jié)就是:使用PureRenderMixin + immutable.js

參考

React.js Conf 2015 - Immutable Data and React

Immutability Helpers

PureRenderMixin

immutable-js

相關(guān)文章

  • JavaScript模塊化開發(fā)之SeaJS

    JavaScript模塊化開發(fā)之SeaJS

    SeaJS是一個遵循CommonJS規(guī)范的JavaScript模塊加載框架,可以實現(xiàn)JavaScript的模塊化開發(fā)及加載機制,本文給大家介紹JavaScript模塊化開發(fā)之SeaJS,需要的朋友參考下
    2015-12-12
  • javascript html5移動端輕松實現(xiàn)文件上傳

    javascript html5移動端輕松實現(xiàn)文件上傳

    這篇文章主要為大家詳細介紹了javascript html5移動端輕松實現(xiàn)文件上傳的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 如何利用JS檢查元素是否在視口內(nèi)

    如何利用JS檢查元素是否在視口內(nèi)

    這篇文章主要給大家介紹了關(guān)于如何利用JS檢查元素是否在視口內(nèi)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • layui實現(xiàn)tab的添加拒絕重復的方法

    layui實現(xiàn)tab的添加拒絕重復的方法

    今天小編就為大家分享一篇layui實現(xiàn)tab的添加拒絕重復的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 淺談js繼承的實現(xiàn)及公有、私有、靜態(tài)方法的書寫

    淺談js繼承的實現(xiàn)及公有、私有、靜態(tài)方法的書寫

    下面小編就為大家?guī)硪黄獪\談js繼承的實現(xiàn)及公有、私有、靜態(tài)方法的書寫。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • js前端日歷控件(懸浮、拖拽、自由變形)

    js前端日歷控件(懸浮、拖拽、自由變形)

    這篇文章主要為大家詳細介紹了js前端日歷控件,可根據(jù)日期自定義日歷上某日的顏色,另外可以懸浮,拖拽,自由變形
    2017-03-03
  • JavaScript中閉包的詳解

    JavaScript中閉包的詳解

    本文主要介紹了JavaScript中閉包的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • JS查找字符串中出現(xiàn)次數(shù)最多的字符

    JS查找字符串中出現(xiàn)次數(shù)最多的字符

    本文給大家?guī)韮煞Njs中查找字符串中出現(xiàn)次數(shù)最多的字符,在這兩種方法中小編推薦使用第二種,對js查找字符串出現(xiàn)次數(shù)的相關(guān)知識感興趣的朋友一起看看吧
    2016-09-09
  • Array的push與unshift方法性能比較分析

    Array的push與unshift方法性能比較分析

    Array的push與unshift方法都能給當前數(shù)組添加元素,不同的是,push是在末尾添加,而unshift則是在開頭添加。
    2011-03-03
  • 微信小程序?qū)崿F(xiàn)分享朋友圈的圖片功能示例

    微信小程序?qū)崿F(xiàn)分享朋友圈的圖片功能示例

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)分享朋友圈的圖片功能,結(jié)合實例形式分析了微信小程序?qū)崿F(xiàn)分享到朋友圈功能的具體操作技巧,需要的朋友可以參考下
    2019-01-01

最新評論

古交市| 韩城市| 信丰县| 温泉县| 隆安县| 临湘市| 湟源县| 上饶市| 喀什市| 乌海市| 黄大仙区| 东兰县| 中山市| 新建县| 潜江市| 梨树县| 敦煌市| 桂阳县| 丰都县| 金堂县| 奉贤区| 华安县| 临江市| 桑日县| 平舆县| 建湖县| 井陉县| 平远县| 屏山县| 大埔区| 永胜县| 北安市| 博白县| 确山县| 正定县| 台州市| 泸州市| 新源县| 邮箱| 远安县| 华坪县|