日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue 虛擬DOM的原理

瀏覽:86日期:2022-11-17 10:51:52

為什么需要虛擬DOM?

如果對前端工作進行抽象的話,主要就是維護狀態和更新視圖,而更新視圖和維護狀態都需要DOM操作。其實近年來,前端的框架主要發展方向就是解放DOM操作的復雜性。

運行js的速度是很快的,大量的操作DOM就會很慢,時常在更新數據后會重新渲染頁面,這樣造成在沒有改變數據的地方也重新渲染了DOM 節點,這樣就造成了很大程度上的資源浪費。

在jQuery出現以前,我們直接操作DOM結構,這種方法復雜度高,兼容性也較差。有了jQuery強大的選擇器以及高度封裝的API,我們可以更方便的操作DOM,jQuery幫我們處理兼容性問題,同時也使DOM操作變得簡單。

但是聰明的程序員不可能滿足于此,各種MVVM框架應運而生,有angularJS、avalon、vue.js等,MVVM使用數據雙向綁定,使得我們完全不需要操作DOM了,更新了狀態,視圖會自動更新。更新了視圖數據狀態也會自動更新,可以說MVVM使得前端的開發效率大幅提升。但是其大量的事件綁定使得其在復雜場景下的執行性能堪憂,有沒有一種兼顧開發效率和執行效率的方案呢?由此引入Virtual DOM(虛擬DOM)。

利用在內存中生成與真實DOM與之對應的數據結構,這個在內存中生成的結構稱之為虛擬DOM 。

當數據發生變化時,能夠智能地計算出重新渲染組件的最小代價并應用到DOM操作上。

Virtual DOM 算法

所謂的 Virtual DOM 算法。包括幾個步驟:

1.用 JavaScript 對象結構表示 DOM 樹的結構;然后用這個樹構建一個真正的 DOM 樹,插到文檔當中;

2.當狀態變更的時候,重新構造一棵新的對象樹。然后用新的樹和舊的樹進行比較,記錄兩棵樹差異;

3.把2所記錄的差異應用到步驟1所構建的真正的DOM樹上,視圖就更新了。

Virtual DOM 本質上就是在 JS 和 DOM 之間做了一個緩存。可以類比 CPU 和硬盤,既然硬盤這么慢,我們就在它們之間加個緩存。

既然 DOM 這么慢,我們就在它們 JS 和 DOM 之間加個緩存。CPU(JS)只操作內存(Virtual DOM),最后的時候再把變更寫入硬盤(DOM)。

所謂的virtual dom,也就是虛擬節點。它通過js的Object對象模擬DOM中的節點,然后再通過特定的render方法將其渲染成真實的DOM節點 dom。diff 則是通過JS層面的計算,返回一個patch對象,即補丁對象,在通過特定的操作解析patch對象,完成頁面的重新渲染。

vue 虛擬DOM的原理

比較兩棵虛擬DOM樹的差異

比較兩棵DOM樹的差異是 Virtual DOM 算法最核心的部分,這也是所謂的 Virtual DOM 的 diff 算法。

兩個樹的完全的 diff 算法是一個時間復雜度為 O(n^3) 的問題。但是在前端當中,你很少會跨越層級地移動DOM元素。所以 Virtual DOM 只會對同一個層級的元素進行對比:

vue 虛擬DOM的原理

上面的div只會和同一層級的div對比,第二層級的只會跟第二層級對比。這樣算法復雜度就可以達到 O(n)。

在實際的代碼中,會對新舊兩棵樹進行一個深度優先的遍歷,這樣每個節點都會有一個唯一的標記,如下圖所示:

vue 虛擬DOM的原理

Virtual DOM 算法實現

Virtual DOM 算法得實現主要是用三個函數:element,diff,patch。然后就可以實際的進行使用,如下面代碼所示:

// 1. 構建虛擬DOMvar tree = el(’div’, {’id’: ’container’}, [ el(’h1’, {style: ’color: blue’}, [’simple virtal dom’]), el(’p’, [’Hello, virtual-dom’]), el(’ul’, [el(’li’)])])// 2. 通過虛擬DOM構建真正的DOMvar root = tree.render()document.body.appendChild(root)// 3. 生成新的虛擬DOMvar newTree = el(’div’, {’id’: ’container’}, [ el(’h1’, {style: ’color: red’}, [’simple virtal dom’]), el(’p’, [’Hello, virtual-dom’]), el(’ul’, [el(’li’), el(’li’)])])// 4. 比較兩棵虛擬DOM樹的不同var patches = diff(tree, newTree)// 5. 在真正的DOM元素上應用變更patch(root, patches)

diff算法

用 三大策略 將O(n^3)復雜度 轉化為 O(n)復雜度

策略一(tree diff):

Web UI中DOM節點跨層級的移動操作特別少,可以忽略不計。

策略二(component diff):

擁有相同類的兩個組件 生成相似的樹形結構,擁有不同類的兩個組件 生成不同的樹形結構。

策略三(element diff):

對于同一層級的一組子節點,通過唯一id區分。

tree diff

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

vue 虛擬DOM的原理

diff只簡單考慮同層級的節點位置變換,如果是跨層級的話,只有創建節點和刪除節點的操作。

vue 虛擬DOM的原理

如上圖所示,以A為根節點的整棵樹會被重新創建,而不是移動,因此官方建議不要進行DOM節點跨層級操作,可以通過CSS隱藏、顯示節點,而不是真正地移除、添加DOM節點。

以上就是vue 虛擬DOM的原理的詳細內容,更多關于vue 虛擬DOM的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产欧美日韩一区二区三区四区 | 丝袜美腿诱惑一区二区三区| 国产日韩欧美一区在线| 日韩中文字幕一区二区三区| 国产综合精品| 中文日韩在线| 日韩一区精品视频| 天堂久久av| 欧美日韩一区二区国产| 国产日韩欧美一区| 国产精品乱战久久久| 免费一级欧美在线观看视频| 国产精品v一区二区三区| 免费一级欧美片在线观看网站 | 在线看片不卡| 99国产精品久久久久久久成人热| 日韩视频一区| 午夜天堂精品久久久久| 久久国产麻豆精品| 精品高清久久| 亚洲va中文在线播放免费| 国产美女高潮在线| 精品欧美久久| 少妇精品久久久| 国产精品红桃| 免费福利视频一区二区三区| 亚洲高清久久| 99国产精品99久久久久久粉嫩| 亚洲三级国产| 国产精品1区| 亚洲成人不卡| 欧美在线综合| 久久国际精品| 欧美三区四区| 亚洲一区二区日韩| 国产毛片精品| 国产综合色区在线观看| 亚洲免费观看| 国产精品久久久久毛片大屁完整版| 国产伦久视频在线观看| 首页欧美精品中文字幕| 国产伦乱精品| 国产一区丝袜| 亚洲精品小说| 欧美一级全黄| 麻豆视频在线看| 欧美日韩日本国产亚洲在线 | 亚洲自拍另类| 国产麻豆一区二区三区精品视频| 国产网站在线| 在线精品一区| 精品久久免费| 视频一区在线播放| 国产精品一国产精品| 久久久久国产一区二区| 亚洲欧洲国产精品一区| 国产一区二区三区四区二区| 欧洲激情综合| 欧美片网站免费| 91精品啪在线观看国产18| 亚洲精品黄色| 日韩另类视频| 欧美日韩亚洲一区在线观看| 九一精品国产| 美女国产精品久久久| 不卡在线一区| 久久久久久久久成人| 先锋影音久久久| 久久69成人| 亚洲一级淫片| 亚洲国产专区| 久久不见久久见中文字幕免费| 亚洲一区二区动漫| 麻豆成全视频免费观看在线看| 亚洲免费观看高清完整版在线观| 91偷拍一区二区三区精品| 亚洲香蕉久久| 999久久久国产精品| 国产精品久久久久久久久免费高清| 亚洲一区二区毛片| 成人片免费看| 国产麻豆一区二区三区精品视频| 欧美特黄一级| 麻豆久久久久久| 亚州精品视频| 五月天久久777| 国产精品13p| 欧美啪啪一区| 免费人成黄页网站在线一区二区| 国产精品成人a在线观看| 亚洲美女久久| 精品1区2区3区4区| 蜜臀久久精品| 国产精品欧美三级在线观看| 在线免费观看亚洲| 午夜国产欧美理论在线播放 | 日韩中文字幕1| av一区在线| 韩日一区二区| 麻豆精品在线| 欧美日韩一区二区国产| 亚洲精品伊人| 丝袜美腿亚洲色图| 黄色免费成人| 欧美亚洲精品在线| 日韩三区免费| 亚洲1234区| 成人片免费看| 成人影视亚洲图片在线| 国产精品一区高清| 免费黄网站欧美| 黄色av日韩| 一区二区自拍| 亚洲精品99| 国产亚洲在线观看| 欧美另类专区| 欧美综合二区| 视频一区视频二区中文字幕| 丝袜亚洲另类欧美| 亚洲视频电影在线| 蜜桃久久精品一区二区| 蜜桃久久精品一区二区| 蜜臀av亚洲一区中文字幕| 免费视频久久| 蜜桃视频在线观看一区二区| 国产综合激情| 亚洲一区久久| 男女激情视频一区| 老司机久久99久久精品播放免费| 国产农村妇女精品一区二区| 99综合视频| 蜜桃久久久久久| 五月亚洲婷婷 | 伊人成人网在线看| 亚洲黄色影院| 亚洲一二三区视频| 亚洲精品看片| 欧美亚洲专区| 久久精品国产一区二区| 国产自产自拍视频在线观看| 日韩精品欧美| 国产免费成人| 青青草精品视频| 久久精品国产99国产| а√天堂8资源在线| 国产91精品对白在线播放| 红桃视频国产一区| 亚洲精品日韩久久| 国产精品日本一区二区不卡视频| 久久精品一区二区国产| 蜜桃视频在线网站| 日韩视频中文| 日韩激情一区二区| 麻豆91在线播放| www成人在线视频| 99日韩精品| 青青草91久久久久久久久| 麻豆国产精品一区二区三区| 日韩一区电影| 先锋亚洲精品| 国产伦理一区| 久久青青视频| 亚洲激情国产| 国产亚洲精aa在线看| 国产精品二区不卡| 亚洲一区二区动漫| 国产麻豆一区二区三区精品视频| 国产一区二区三区不卡av| 91精品国产福利在线观看麻豆| 亚洲三级观看| 成人影视亚洲图片在线| 亚洲欧美日韩国产一区二区| 国产欧美视频在线| 久久久久免费av| 五月激激激综合网色播| av免费不卡国产观看| 久久国产高清| 久久精品亚洲一区二区| 亚洲高清影视| 欧美激情日韩| 老鸭窝亚洲一区二区三区| 国产精品主播| 久久一区二区三区电影| 日本久久一区| 五月激情久久| 亚欧洲精品视频在线观看| 都市激情国产精品| 亚洲精品精选| 国产成人精选| 男女男精品视频网| 久久久久免费| 日韩在线观看一区二区三区| 欧美激情另类| 中文字幕成人| 成人羞羞视频播放网站| 国产香蕉精品| 亚洲自拍另类| jizzjizz中国精品麻豆| 亚洲97av| 欧美日韩少妇|