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

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

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

引言

可能的原因是以前學習框架的時候只學語法和原理不明白,被問到使用框架有什么好處也回答不上來,正是因為這種情況,所以今天要來探討一下Virtual DOM的作用原理。

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

DOM是什么?

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

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

引用MDN的圖紙

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

  • 重繪

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

  • 回流

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

很簡單,這是一個很正常的運行原因,它是一個非常重要的播放器就可以只更新需要異動的部分。

Virtual DOM的流程

1、什么東西使用setState()方法的時候,React 會先復制一個dom(即為Virtual DOM )

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

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

一般這是的html結構

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

這是Virtual DOM的結構,是JavaScript模擬出來的物件,會以下面的格式儲存起來

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

簡單模擬一下虛擬dom的流程

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

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

2、當count變動時 Virtual DOM進行對比 再將差異patch到真實的DOM

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

什么是patch?patch指的是在原有的DOM結構上做異動

關于diff算法

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

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

1、Virtual DOM比較相同層級的節(jié)點

2、同一層的同一節(jié)點再次出現一個唯一的關鍵,就是避免移動被再次創(chuàng)建。

3、如果發(fā)現不見了其子節(jié)點也會一并消除,不會再做比對 開發(fā)者只要在數據邏輯上運行一次更新機制全部自動處理。

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

以上就是React Virtual DOM前端框架全面分析的詳細內容,更多關于React Virtual DOM前端框架的資料請關注腳本之家其它相關文章!

相關文章

  • react中antd Upload手動上傳的示例

    react中antd Upload手動上傳的示例

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

    React中井字棋游戲的實現示例

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

    React函數式組件Hook中的useState函數的詳細解析

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

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

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

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

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

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

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

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

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

    React中路由參數如何改變頁面不刷新數據的情況

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

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

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

    React實現簡單登錄的項目實踐

    登錄、注冊、找回密碼是前端項目經常遇到的需求,本文主要介紹了React實現簡單登錄的項目實踐,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01

最新評論

龙山县| 霍林郭勒市| 镇雄县| 大洼县| 四子王旗| 依安县| 依兰县| 深水埗区| 泗水县| 河北区| 景宁| 林周县| 天柱县| 玉山县| 大竹县| 西林县| 苏尼特右旗| 乐亭县| 饶平县| 高平市| 夏邑县| 县级市| 延寿县| 武强县| 永善县| 襄樊市| 玛纳斯县| 建阳市| 阿勒泰市| 郁南县| 顺平县| 喀什市| 体育| 普兰县| 昭苏县| 拜城县| 金山区| 绥棱县| 赤水市| 饶河县| 鲁山县|