国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

React Diff算法

這篇具有很好參考價值的文章主要介紹了React Diff算法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

React Diff算法

diff算法,是虛擬DOM產(chǎn)生的一個概念,用來計算出虛擬DOM中真正變化的部分,并只針對該部分進行原生DOM操作,而非重新渲染整個頁面,從而提高了頁面的渲染效率。

一、它的作用是什么?

  • 渲染真實DOM的開銷很大,有時候我們修改某個數(shù)據(jù)時,直接渲染到真實DOM上會引起整個DOM樹的重繪和重排。我們希望只更新我們該的那么一小塊DOM,而不是整個DOM,diff算法就幫我們實現(xiàn)了這一點。

diff算法本質(zhì)就是:找出兩個對象之間的差異,目的是盡可能做到節(jié)點復(fù)用。

二、React的Diff算法

1.了解一下什么是調(diào)和?

將virtualDOM(虛擬DOM)轉(zhuǎn)換成actualDOM(真實DOM)的最少操作過程就叫調(diào)和,簡單理解就是簡化算法復(fù)雜度。

2.react的diff算法

react的diff算法就是實現(xiàn)了上述的調(diào)和,簡化了算法的復(fù)雜度。

3.React Diff的三大策略

react用tree diff(樹比較)、component diff(組件比較)、element diff(元素比較)三大策略將O(n^3)的復(fù)雜度轉(zhuǎn)化為O(n)的復(fù)雜度
(1) 策略一(tree diff):Web UI中DOM節(jié)點跨層級的移動操作特別少,可以忽略不計。

(2) 策略二(component diff):擁有相同類的兩個組件生成相似的樹形結(jié)構(gòu),擁有不同類的兩個組件生成不同的樹形結(jié)構(gòu)。

(3) 策略三(element diff):對于同一層級的一組子節(jié)點,通過唯一id區(qū)分。

React Diff算法,前端,#  React,react.js,算法,javascript

4.tree diff:

(1) React通過updateDepth對比Virtual DOM樹進行層級控制。
(2) 對樹分層比較,兩顆樹只對同一層次節(jié)點進行比較。如果該節(jié)點不存在時,則該節(jié)點及其子節(jié)點會被完全刪除,不會再進一步比較。
(3) 只需遍歷一次,就能完成整顆DOM樹的比較。

1、如果DOM節(jié)點出現(xiàn)了跨層級操作,Diff會怎么辦?

Tree Diff是對樹的每一層進行遍歷,如果某組件不存在了,則會直接銷毀。
React Diff算法,前端,#  React,react.js,算法,javascript

5. component diff:

(1) 同一類型的兩個組件,按原策略(層級比較)繼續(xù)比較Virtual DOM樹即可。
(2) 同一類型的兩個組件,組件A變化為組件B時,可能Virtual DOM沒有任何變化,如果知道這點,可節(jié)省大量計算時間,所以用戶可以通過shouldComponentUpdate()來判斷是否需要判斷計算。
(3) 不同類型的組件,將一個組件判斷為dirtycomponent(臟組件),從而替換整個組件的所有節(jié)點。

React Diff算法,前端,#  React,react.js,算法,javascript

注意:如上圖所示,當(dāng)組件D變?yōu)榻M件G時,即使這兩個組件結(jié)構(gòu)相似,一旦React判斷D和G是不用類型的組件,就不會比較兩者的結(jié)構(gòu),而是直接刪除組件D,重新創(chuàng)建組件G及其子節(jié)點。雖然當(dāng)兩個組件是不同類型但結(jié)構(gòu)相似時,進行diff算法分析會影響性能,但是畢竟不同類型的組件存在相似DOM樹的情況在實際開發(fā)過程中很少出現(xiàn),因此這種極端因素很難在實際開發(fā)過程中造成重大影響。

6. element diff:

當(dāng)節(jié)點處于同一層級時,diff提供三種節(jié)點操作:刪除、插入、移動
插入:組件C不在集合(A,B)中,需要插入。
刪除

  1. 組件D在集合(A,B,D)中,但D的節(jié)點已經(jīng)更改,不能復(fù)用和更新,所以需要刪除舊的D,再創(chuàng)建新的。
  2. 組件D之前在集合(A,B.D)中,但集合變成新的集合(A,B)了,D就需要被刪除。

移動:組件D已經(jīng)在集合(A,B,C,D)里了,且集合更新時,D沒有發(fā)生更新,只是位置改變,如新集合(A,D,B,C),D在第二個,無需像傳統(tǒng)DIFF,讓就集合的第二個B和新集合的第二個D比較,并且刪除第二個位置的B,在第二個位置插入D,而是添加唯一key進行區(qū)分,移動即可。
React Diff算法,前端,#  React,react.js,算法,javascript

(1)B不移動,不贅述,更新l astIndex=1

(2)新集合取得 E,發(fā)現(xiàn)舊不存在,故在lastIndex=1的位置 創(chuàng)建E,更新lastIndex=1

(3)新集合取得C,C不移動,更新lastIndex=2

(4)新集合取得A,A移動,同上,更新lastIndex=2

(5)新集合對比后,再對舊集合遍歷。判斷 新集合 沒有,但 舊集合 有的元素(如D,新集合沒有,舊集合有),發(fā)現(xiàn) D,刪除D,diff操作結(jié)束。

6. element diff:

基于tree diff:

  • 開發(fā)組件時,注意保持DOM結(jié)構(gòu)的穩(wěn)定;即,盡可能少地動態(tài)操作DOM結(jié)構(gòu),尤其是移動操作。
  • 當(dāng)節(jié)點數(shù)過大或者頁面更新次數(shù)過多時,頁面卡頓的現(xiàn)象會比較明顯。
  • 這時可以通過 CSS 隱藏或顯示節(jié)點,而不是真的移除或添加 DOM 節(jié)點。

基于component diff:

  • 注意使用 shouldComponentUpdate() 來減少組件不必要的更新。
  • 對于類似的結(jié)構(gòu)應(yīng)該盡量封裝成組件,既減少代碼量,又能減少component diff的性能消耗。

基于element diff:

  • 對于列表結(jié)構(gòu),盡量減少類似將最后一個節(jié)點移動到列表首部的操作,當(dāng)節(jié)點數(shù)量過大或更新操作過于頻繁時,在一定程度上會影響 React 的渲染性能。

總結(jié)

提示:這里對文章進行總結(jié):
例如:以上就是今天要講的內(nèi)容,本文僅僅簡單介紹了pandas的使用,而pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-672086.html

到了這里,關(guān)于React Diff算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • vue和react的diff算法源碼

    Vue.js 的 Diff 算法主要基于 Snabbdom,以下是 Vue.js 中虛擬 DOM Diff 算法的簡化版?zhèn)未a,以便說明其基本思想: 這里主要關(guān)注 patchVnode 函數(shù),它是 Diff 算法的核心。Vue.js 的 Diff 算法采用了一種雙端比較的策略,具體步驟如下: 1.同層級比較: 首先比較新舊節(jié)點的同層級,通過

    2024年03月15日
    瀏覽(24)
  • React源碼解析18(10)------ 實現(xiàn)多節(jié)點的Diff算法

    在上一篇中,實現(xiàn)了多節(jié)點的渲染。但是之前寫得diff算法,只能適用于單節(jié)點的情況,例如這種情況: 如果對于多節(jié)點的情況: 之前實現(xiàn)的diff算法就不會有效果了,所以在這一篇中,我們主要實現(xiàn)針對于多節(jié)點的diff算法。 實現(xiàn)之前,我們先將index.js修改一下: 在reconcile

    2024年02月12日
    瀏覽(18)
  • react+vue 前端國密算法sm2、sm3 、sm4的js ts實現(xiàn)

    1. 簡單介紹下SM2 和 SM3 SM2 算法:是一種公鑰加密算法,它的密鑰長度為 256 位,安全性較高??捎糜跀?shù)字簽名、密鑰協(xié)商等場景。 SM3 算法:是一種對稱加密算法,用于消息摘要和數(shù)字簽名等場景。它的密鑰長度為 256 位,安全性較高。SM3 算法與 SM2 算法相互配合,提高了整體

    2024年01月19日
    瀏覽(34)
  • JavaScript 框架比較:Angular、React、Vue.js

    在 Web 開發(fā)領(lǐng)域,JavaScript 提供大量技術(shù)??晒┻x擇。其中最典型的三套組合,分別是 MERN、MEAN 和 MEVN。這些首字母相同的選項各自代表不同的技術(shù)加工具組合。為了在這些技術(shù)棧中做出明智選擇,讓我們先從核心組件聊起,再對各自前端框架(React、Angular 和 Vue)進行簡化比

    2024年01月20日
    瀏覽(36)
  • 從javascript到vue再到react:前端開發(fā)框架的演變

    從javascript到vue再到react:前端開發(fā)框架的演變

    目錄 JavaScript: 動態(tài)語言的基礎(chǔ) JavaScript:Web開發(fā)的起點 Vue.js: 漸進式框架的興起 Vue.js:簡潔、高效的前端框架 React.js: 聲明式UI的革新 React.js:強大、靈活的前端框架 演變之路與未來展望 演變過程 當(dāng)提到前端開發(fā)中的框架時,JavaScript、Vue.js和React.js是三個最常見的名詞。它

    2024年02月07日
    瀏覽(34)
  • JavaScript框架 Angular、React、Vue.js 的全棧解決方案比較

    JavaScript框架 Angular、React、Vue.js 的全棧解決方案比較

    在 Web 開發(fā)領(lǐng)域,JavaScript 提供大量技術(shù)??晒┻x擇。其中最典型的三套組合,分別是 MERN、MEAN 和 MEVN。前端框架(React、Angular 和 Vue)進行簡化比較。 MERN 技術(shù)棧包含四大具體組件: MongoDB:一款強大的 NoSQL 數(shù)據(jù)庫,以靈活的 JSON 格式存儲數(shù)據(jù)。 Express.js:一套極簡但強大的

    2024年02月03日
    瀏覽(32)
  • 2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比較

    2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比較

    ??歡迎來到Java學(xué)習(xí)路線專欄~探索2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比較 ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁:IT·陳寒的博客 ??該系列文章專欄:Java學(xué)習(xí)路線 ??其他專欄:Java學(xué)習(xí)路線 Java面試技巧 Java實戰(zhàn)項目 AIGC人工智能 ??文章作者技術(shù)和水

    2024年02月11日
    瀏覽(29)
  • React.js前端 + Spring Boot后端員工管理

    該項目是一個員工管理系統(tǒng),前端使用 React.js 構(gòu)建,后端使用 Spring Boot 和 Data JPA 和 Lombok 構(gòu)建。它提供了有效管理員工信息的全面解決方案。 特征 響應(yīng)式設(shè)計:響應(yīng)式 UI 設(shè)計,確??绺鞣N設(shè)備的可用性。 數(shù)據(jù)驗證:驗證用戶輸入以確保數(shù)據(jù)完整性。 使用的技術(shù) 前端:R

    2024年04月28日
    瀏覽(25)
  • 前端js react vue怎么實現(xiàn)在線預(yù)覽doc文檔

    前端js react vue怎么實現(xiàn)在線預(yù)覽doc文檔

    先說結(jié)論: 目前在純前端層面沒有很好的方案,基本都需要服務(wù)端的介入。 優(yōu)點 :簡單易用,無需配置 缺點 :文檔需要支持外網(wǎng)訪問,且文檔會是公開可見的,所以對于一些內(nèi)部敏感的文檔來說,這個顯然是不可行的。 需要后端介入配合 onlyoffice地址 這個也要先在服務(wù)器

    2024年02月15日
    瀏覽(31)
  • 前端框架之爭:Vue.js vs. React.js vs. Angular

    前端框架之爭:Vue.js vs. React.js vs. Angular

    ??歡迎來到Web前端專欄~前端框架之爭:Vue.js vs. React.js vs. Angular ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒?? ?博客主頁:IT·陳寒的博客 ??該系列文章專欄:架構(gòu)設(shè)計 ??其他專欄:Java學(xué)習(xí)路線 Java面試技巧 Java實戰(zhàn)項目 AIGC人工智能 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) ??文章作者技術(shù)和水平有限,如果

    2024年02月07日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包