电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

vue 虛擬DOM的原理

瀏覽:2日期: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
相關文章:
主站蜘蛛池模板: 衬塑设备,衬四氟设备,衬氟设备-淄博鲲鹏防腐设备有限公司 | H型钢切割机,相贯线切割机,数控钻床,数控平面钻,钢结构设备,槽钢切割机,角钢切割机,翻转机,拼焊矫一体机 | 复盛空压机配件-空气压缩机-复盛空压机(华北)总代理 | 济南轻型钢结构/济南铁艺护栏/济南铁艺大门-济南燕翔铁艺制品有限公司 | 南京欧陆电气股份有限公司-风力发电机官网 | 船老大板材_浙江船老大全屋定制_船老大官网 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 新疆散热器,新疆暖气片,新疆电锅炉,光耀暖通公司 | 阳光模拟试验箱_高低温试验箱_高低温冲击试验箱_快速温变试验箱|东莞市赛思检测设备有限公司 | 欧版反击式破碎机-欧版反击破-矿山石料破碎生产线-青州奥凯诺机械 | 模具钢_高速钢_不锈钢-万利钢金属材料 | 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | 基本型顶空进样器-全自动热脱附解吸仪价格-AutoHS全模式-成都科林分析技术有限公司 | 深圳诚暄fpc首页-柔性线路板,fpc柔性线路板打样生产厂家 | 卸料器-卸灰阀-卸料阀-瑞安市天蓝环保设备有限公司 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | 2-羟基泽兰内酯-乙酰蒲公英萜醇-甘草查尔酮A-上海纯优生物科技有限公司 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 | 低噪声电流前置放大器-SR570电流前置放大器-深圳市嘉士达精密仪器有限公司 | 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 数显恒温培养摇床-卧式/台式恒温培养摇床|朗越仪器 | 步入式高低温测试箱|海向仪器| 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 施工电梯_齿条货梯_烟囱电梯_物料提升机-河南大诚机械制造有限公司 | 湖南印刷厂|长沙印刷公司|画册印刷|挂历印刷|台历印刷|杂志印刷-乐成印刷 | 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 高温高压釜(氢化反应釜)百科| 七维官网-水性工业漆_轨道交通涂料_钢结构漆 | 仿清水混凝土_清水混凝土装修_施工_修饰_保护剂_修补_清水混凝土修复-德州忠岭建筑装饰工程 | 中红外QCL激光器-其他连续-半导体连续激光器-筱晓光子 | 手持式线材张力计-套帽式风量罩-深圳市欧亚精密仪器有限公司 | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 自清洗过滤器,浅层砂过滤器,叠片过滤器厂家-新乡市宇清净化 | 锯边机,自动锯边机,双面涂胶机-建业顺达机械有限公司 |