亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

react精髓之一---diff算法

Miyang / 2446人閱讀

摘要:傳統(tǒng)算法的一大特點(diǎn)就是虛擬的算法,下圖為實(shí)現(xiàn)流程圖。如果的子節(jié)點(diǎn)仍有子節(jié)點(diǎn)依舊順次執(zhí)行。我們來觀察下復(fù)雜度傳統(tǒng)算法的復(fù)雜度為,單純從看,復(fù)雜度不到,但實(shí)際上。通過制定大膽的策略,將復(fù)雜度的問題轉(zhuǎn)換成復(fù)雜度的問題。

從react渲染開始:

  在說react虛擬dom之前我們先來看看react渲染過程,下面鏈接是根據(jù)源碼渲染過程寫的簡(jiǎn)寫版。
http://1.sharemandy.sinaapp.c... 有js基礎(chǔ)的比較好理解,也寫了注釋,不再詳細(xì)展開。了解了初始化渲染后,再來看如何對(duì)比渲染。

傳統(tǒng)diff算法

react的一大特點(diǎn)就是虛擬DOM的diff算法,下圖為diff實(shí)現(xiàn)流程圖。


現(xiàn)在我們就主要分析下react的diff算法:
react的算法和傳統(tǒng)算法有多不同,下面是我對(duì)傳統(tǒng)算法的理解畫的流程圖(歡迎討論):

  圖很清楚,其實(shí)傳統(tǒng)算法就是對(duì)每個(gè)節(jié)點(diǎn)一一對(duì)比,循環(huán)遍歷所有的子節(jié)點(diǎn),然后判斷子節(jié)點(diǎn)的更新狀態(tài),分別為remove、add、change。如果before的子節(jié)點(diǎn)仍有子節(jié)點(diǎn)依舊順次執(zhí)行。
  我們來觀察下復(fù)雜度,傳統(tǒng) diff 算法的復(fù)雜度為 O(n^3),單純從demo看,復(fù)雜度不到n3,但實(shí)際上。
React 通過制定大膽的策略,將 O(n^3) 復(fù)雜度的問題轉(zhuǎn)換成 O(n) 復(fù)雜度的問題。
  其實(shí)算法直接降低這么多,肯定是有多犧牲的,或者說是是指定了特定的策略,定制化的實(shí)現(xiàn)了所需算法。react就是如此,他根據(jù)自己的特點(diǎn),實(shí)現(xiàn)了部分代碼的簡(jiǎn)化。

上面的特點(diǎn)為react的核心,其實(shí)react的核心代碼并不多,所以很多人都深究過,很多文章都有詳細(xì)解釋,在下面的好文章收錄中都有提到,這里不再贅述,只做總結(jié)。

下篇我們就會(huì)講講diff算法的詳細(xì)流程圖

好文章收錄:
react算法源碼地址:https://github.com/facebook/r...
論文算法詳解:http://grfia.dlsi.ua.es/ml/al...
react源碼剖析(這篇文章對(duì)圖中移位算法有詳細(xì)解釋):http://zhuanlan.zhihu.com/p/2...
源碼分析:http://purplebamboo.github.io/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/79182.html

相關(guān)文章

  • 從零自己編寫一個(gè)React框架 【中高級(jí)前端殺手锏級(jí)別技能】

    摘要:想要自己實(shí)現(xiàn)一個(gè)簡(jiǎn)易版框架,并不是非常難。為了防止出現(xiàn)這種情況,我們需要改變整體的策略。上面這段話,說的就是版本和架構(gòu)的區(qū)別。 showImg(https://segmentfault.com/img/bVbwfRh); 想要自己實(shí)現(xiàn)一個(gè)React簡(jiǎn)易版框架,并不是非常難。但是你需要先了解下面這些知識(shí)點(diǎn)如果你能閱讀以下的文章,那么會(huì)更輕松的閱讀本文章: 優(yōu)化你的超大型React應(yīng)用 ...

    hot_pot_Leo 評(píng)論0 收藏0
  • 從零自己編寫一個(gè)React框架 【中高級(jí)前端殺手锏級(jí)別技能】

    摘要:想要自己實(shí)現(xiàn)一個(gè)簡(jiǎn)易版框架,并不是非常難。為了防止出現(xiàn)這種情況,我們需要改變整體的策略。上面這段話,說的就是版本和架構(gòu)的區(qū)別。 showImg(https://segmentfault.com/img/bVbwfRh); 想要自己實(shí)現(xiàn)一個(gè)React簡(jiǎn)易版框架,并不是非常難。但是你需要先了解下面這些知識(shí)點(diǎn)如果你能閱讀以下的文章,那么會(huì)更輕松的閱讀本文章: 優(yōu)化你的超大型React應(yīng)用 ...

    codecook 評(píng)論0 收藏0
  • [譯]React 元素 vs React 組件 vs 組件支撐實(shí)例

    摘要:元素和組件實(shí)例都不表示真實(shí)元素。我希望這篇文章能夠幫助你理清這些術(shù)語參考資料翻譯成支撐實(shí)例來自于理解中方法創(chuàng)建組件的聲明式編程和命令式編程的比較對(duì)循環(huán)提示增加的研究精髓之一算法 本篇為譯文,原文出處:React Elements vs React Components vs Component Backing Instances 許多人可能聽說過 Facebook 的 React 庫,...

    gnehc 評(píng)論0 收藏0
  • react虛擬dom機(jī)制與diff算法

    摘要:的一個(gè)突出特點(diǎn)是擁有極速地渲染性能。該功能依靠的就是研發(fā)團(tuán)隊(duì)弄出的虛擬機(jī)制以及其獨(dú)特的算法。在的算法下,在同一位置對(duì)比前后節(jié)點(diǎn)只要發(fā)現(xiàn)不同,就會(huì)刪除操作前的節(jié)點(diǎn)包括其子節(jié)點(diǎn),替換為操作后的節(jié)點(diǎn)。 React的一個(gè)突出特點(diǎn)是擁有極速地渲染性能。該功能依靠的就是facebook研發(fā)團(tuán)隊(duì)弄出的虛擬dom機(jī)制以及其獨(dú)特的diff算法。下面簡(jiǎn)單解釋一下react虛擬dom機(jī)制和diff算法的實(shí)現(xiàn)...

    jzman 評(píng)論0 收藏0
  • React專題:react,redux以及react-redux常見一些面試題

    摘要:我們可以為元素添加屬性然后在回調(diào)函數(shù)中接受該元素在樹中的句柄,該值會(huì)作為回調(diào)函數(shù)的第一個(gè)參數(shù)返回。使用最常見的用法就是傳入一個(gè)對(duì)象。單向數(shù)據(jù)流,比較有序,有便于管理,它隨著視圖庫的開發(fā)而被概念化。 面試中問框架,經(jīng)常會(huì)問到一些原理性的東西,明明一直在用,也知道怎么用, 但面試時(shí)卻答不上來,也是挺尷尬的,就干脆把react相關(guān)的問題查了下資料,再按自己的理解整理了下這些答案。 reac...

    darcrand 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<