VNode

在vue中定義了一個VNode類,使用它可以實例化不同類型的vnode,而不同類型的vnode實例各自表示不同類型的DOM元素。

VNode作用

每次渲染視圖的時候都會new一個VNode的實例化對象,然後他會緩存上一次渲染視圖。因此當需要重新渲染視圖的時候,將新創建的new_node實例對象和上一次的實例對象old_vnode進行對比,找出不一樣的基於此去修改真實DOM。

為什麼設計vnode?

Vue2.0中等粒度,狀態發生變化時只通知到組件級!即當某個狀態發生變化,只通知該狀態的組件。也就是説當組件中的狀態中任意一個發生了變化,整個組件就會重新渲染
正因為此,對vnode進行緩存,並將old_vnode和new_vnode進行對比,只更新該組件內發生變化的節點。

VNode的類型

vnode共六種類型:
{
1.註釋節點
2.文本節點
3.元素節點
4.組件節點
5.函數式組件
6.克隆節點
}

克隆節點

克隆節點是將現有的節點的屬性賦值到新節點裏。作用是優化靜態節點和插槽節點。
靜態節點:內容不會發生改變的節點,除了首次渲染需要執行渲染函數獲取vnode後,後續更新不需要執行渲染函數重新生成vnode。這時使用創建克隆節點vnode,就不需要重新執行渲染函數了,也就不會再生成新的vnode了

總結

Vue採用虛擬DOM更新視圖,而Vue2.0中等粒度,檢測到組件級別。因此狀態發生變化會重新渲染整個組件,引入vnode後,組件內的所有元素、節點都會對應掛到DOM樹上,然後對比新舊vnode將不同的地方進行渲染,很大程度上減少了性能消耗。