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

React?Virtual?DOM前端框架全面分析

 更新時(shí)間:2023年05月23日 09:44:45   作者:陸榮濤  
這篇文章主要為大家介紹了React?Virtual?DOM前端框架全面分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

可能的原因是以前學(xué)習(xí)框架的時(shí)候只學(xué)語法和原理不明白,被問到使用框架有什么好處也回答不上來,正是因?yàn)檫@種情況,所以今天要來探討一下Virtual DOM的作用原理。

在了解Virtual DOM之前什么是DOM吧!

DOM是什么?

文件模型(Document Object Model,DOM) HTML、XML 和 SVG 文件的程序介面。它提供了文件(樹)的程序的文件表示方法,并定義了訪問并改變文件架構(gòu)、風(fēng)格和內(nèi)容的方法。(摘取自MDN的部分說明)

由下圖可以知道DOM是樹狀結(jié)構(gòu)從文檔根結(jié)點(diǎn)向下延伸,下面依附了很多節(jié)點(diǎn)

引用MDN的圖紙

我們經(jīng)常利用js來操作DOM更新瀏覽器在更新觸發(fā)畫面的重新聲明,當(dāng)回流時(shí)間以及回流(重)這兩個(gè)更新機(jī)制。

  • 重繪

畫面元素更換樣式的時(shí)候就觸發(fā)(background-color、color…)

  • 回流

更改畫面的操作結(jié)構(gòu)(結(jié)構(gòu)排列)觸發(fā)(更改視窗大小,css屬性:position、width、height…)

很簡(jiǎn)單,這是一個(gè)很正常的運(yùn)行原因,它是一個(gè)非常重要的播放器就可以只更新需要異動(dòng)的部分。

Virtual DOM的流程

1、什么東西使用setState()方法的時(shí)候,React 會(huì)先復(fù)制一個(gè)dom(即為Virtual DOM )

2、的改變時(shí),會(huì)比對(duì)先前的虛擬 DOM 和當(dāng)前的虛擬 DOM 區(qū)別,當(dāng)重新行動(dòng)組件的不同狀態(tài)

3、Virtual DOM 先用的演算法(diff算出實(shí)際的部分,比對(duì)之后的不同,再動(dòng)真實(shí)的DOM,有效減少自己的出現(xiàn)),去提高需要更新的效果。

一般這是的html結(jié)構(gòu)

<div id="header">   
  <h1 class="title">蘋果</h1> 
  <p class="content">檸檬</p> 
</div>

這是Virtual DOM的結(jié)構(gòu),是JavaScript模擬出來的物件,會(huì)以下面的格式儲(chǔ)存起來

{
    tag: "div",
    props: {
        id: "header"
    },
    children: [
        {
            tag: "h1",
            props: { className: "title" },
            children: ["Apple"]
        }, {
            tag: "p",
            props: { className: "content" },
            children: ["lemon"]
        }
    ]
}

簡(jiǎn)單模擬一下虛擬dom的流程

1、createELement :先使用Virtual DOM提供的createELement方法來生成真是DOM

var count = 0;
var tree = render(count);
var rootNode = createElement(tree);
document.body.appendChild(rootNode);

2、當(dāng)count變動(dòng)時(shí) Virtual DOM進(jìn)行對(duì)比 再將差異patch到真實(shí)的DOM

count++
var newTree = render(count);
var patches = diff(tree, newTree);
rootNode = patch(rootNode, patches);
tree = newTree;

什么是patch?patch指的是在原有的DOM結(jié)構(gòu)上做異動(dòng)

關(guān)于diff算法

圖片來源https://www.cronj.com/blog/di...

傳統(tǒng)的diff演算法復(fù)雜度為O(n³) 處理100個(gè)節(jié)點(diǎn)對(duì)100萬次的比值,Virtual DOM的diff演算算法為O(n)與傳統(tǒng)的差異化預(yù)測(cè)下:

1、Virtual DOM比較相同層級(jí)的節(jié)點(diǎn)

2、同一層的同一節(jié)點(diǎn)再次出現(xiàn)一個(gè)唯一的關(guān)鍵,就是避免移動(dòng)被再次創(chuàng)建。

3、如果發(fā)現(xiàn)不見了其子節(jié)點(diǎn)也會(huì)一并消除,不會(huì)再做比對(duì) 開發(fā)者只要在數(shù)據(jù)邏輯上運(yùn)行一次更新機(jī)制全部自動(dòng)處理。

關(guān)于diff算法的詳細(xì)理解,可以持續(xù)關(guān)注更新。

以上就是React Virtual DOM前端框架全面分析的詳細(xì)內(nèi)容,更多關(guān)于React Virtual DOM前端框架的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • react中antd Upload手動(dòng)上傳的示例

    react中antd Upload手動(dòng)上傳的示例

    本文主要介紹了react中antd Upload手動(dòng)上傳的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • React中井字棋游戲的實(shí)現(xiàn)示例

    React中井字棋游戲的實(shí)現(xiàn)示例

    本文主要介紹了React中井字棋游戲的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • React函數(shù)式組件Hook中的useState函數(shù)的詳細(xì)解析

    React函數(shù)式組件Hook中的useState函數(shù)的詳細(xì)解析

    Hook 就是 JavaScript 函數(shù),這個(gè)函數(shù)可以幫助你鉤入(hook into) React State以及生命周期等特性,這篇文章主要介紹了React Hook useState函數(shù)的詳細(xì)解析的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • react native環(huán)境安裝流程

    react native環(huán)境安裝流程

    React Native 是目前流行的跨平臺(tái)移動(dòng)應(yīng)用開發(fā)框架之一。本文介紹react native環(huán)境安裝流程及遇到問題解決方法,感興趣的朋友一起看看吧
    2021-05-05
  • React如何通過@craco/craco代理接口

    React如何通過@craco/craco代理接口

    這篇文章主要介紹了React如何通過@craco/craco代理接口問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • React中使用Redux Toolkit狀態(tài)管理的示例詳解

    React中使用Redux Toolkit狀態(tài)管理的示例詳解

    在現(xiàn)代 React 應(yīng)用程序中,狀態(tài)管理是一個(gè)至關(guān)重要的部分,使用 Redux Toolkit 可以簡(jiǎn)化 Redux 的配置和管理,本文將通過三個(gè)文件的示例,詳細(xì)講解如何使用 Redux Toolkit 創(chuàng)建和管理一個(gè)簡(jiǎn)單的計(jì)數(shù)器狀態(tài),需要的朋友可以參考下
    2024-11-11
  • React 首頁加載慢問題性能優(yōu)化案例詳解

    React 首頁加載慢問題性能優(yōu)化案例詳解

    這篇文章主要介紹了React 首頁加載慢問題性能優(yōu)化案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • React中路由參數(shù)如何改變頁面不刷新數(shù)據(jù)的情況

    React中路由參數(shù)如何改變頁面不刷新數(shù)據(jù)的情況

    這篇文章主要介紹了React中路由參數(shù)如何改變頁面不刷新數(shù)據(jù)的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • React Native可復(fù)用 UI分離布局組件和狀態(tài)組件技巧

    React Native可復(fù)用 UI分離布局組件和狀態(tài)組件技巧

    這篇文章主要為大家介紹了React Native可復(fù)用 UI分離布局組件和狀態(tài)組件使用技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • React實(shí)現(xiàn)簡(jiǎn)單登錄的項(xiàng)目實(shí)踐

    React實(shí)現(xiàn)簡(jiǎn)單登錄的項(xiàng)目實(shí)踐

    登錄、注冊(cè)、找回密碼是前端項(xiàng)目經(jīng)常遇到的需求,本文主要介紹了React實(shí)現(xiàn)簡(jiǎn)單登錄的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論

望谟县| 梅河口市| 道孚县| 神木县| 新泰市| 庆云县| 彰武县| 汶川县| 陈巴尔虎旗| 天峨县| 毕节市| 商城县| 弋阳县| 全椒县| 铁力市| 大足县| 潼南县| 牟定县| 平罗县| 高雄县| 石嘴山市| 长岛县| 延边| 翁牛特旗| 正蓝旗| 天等县| 英德市| 凤凰县| 田林县| 客服| 耿马| 大关县| 淮南市| 苗栗县| 荣成市| 上思县| 梁河县| 石棉县| 岳普湖县| 晋宁县| 迁西县|