首先來說說虛擬DOM的原理:虛擬 DOM 的實現(xiàn)原理主要包括以下 3 部分:
1)用 JavaScript 對象模擬真實 DOM 樹,對真實 DOM 進行抽象柳譬;
2)diff 算法 — 比較兩棵虛擬 DOM 樹的差異;
3)pach 算法 — 將兩個虛擬 DOM 對象的差異應用到真正的 DOM 樹相味。
那么究竟什么是虛擬DOM呢恭理?
Vue 通過建立一個虛擬 DOM?來追蹤自己要如何改變真實 DOM。請仔細看這行代碼:
? ? ?return? createElement('h1',this.blogTitle)
createElement?到底會返回什么呢剿牺?其實不是一個實際的?DOM 元素企垦。它更準確的名字可能是?createNodeDescription,因為它所包含的信息會告訴 Vue 頁面上需要渲染什么樣的節(jié)點,包括及其子節(jié)點的描述信息。我們把這樣的節(jié)點描述為“虛擬節(jié)點 (virtual node)”傻唾,也常簡寫它為“VNode”∮担“虛擬 DOM”是我們對由 Vue 組件樹建立起來的整個 VNode 樹的稱呼。
虛擬DOM優(yōu)缺點:
優(yōu)點:
保證性能下限:框架的虛擬 DOM 需要適配任何上層 API 可能產(chǎn)生的操作竹习,它的一些 DOM 操作的實現(xiàn)必須是普適的誊抛,所以它的性能并不是最優(yōu)的;但是比起粗暴的 DOM 操作性能要好很多整陌,因此框架的虛擬 DOM 至少可以保證在你不需要手動優(yōu)化的情況下,依然可以提供還不錯的性能,即保證性能的下限泌辫;
無需手動操作 DOM:我們不再需要手動去操作 DOM随夸,只需要寫好 View-Model 的代碼邏輯,框架會根據(jù)虛擬 DOM 和 數(shù)據(jù)雙向綁定震放,幫我們以可預期的方式更新視圖宾毒,極大提高我們的開發(fā)效率;
跨平臺:虛擬 DOM 本質(zhì)上是 JavaScript 對象,而 DOM 與平臺強相關(guān)殿遂,相比之下虛擬 DOM 可以進行更方便地跨平臺操作诈铛,例如服務器渲染、weex 開發(fā)等等墨礁。
缺點:
無法進行極致優(yōu)化:雖然虛擬 DOM + 合理的優(yōu)化幢竹,足以應對絕大部分應用的性能需求,但在一些性能要求極高的應用中虛擬 DOM 無法進行針對性的極致優(yōu)化恩静。