Vue 中的 Virtual Dom


  Vue.js 2.0引入Virtual DOM,比Vue.js 1.0的初始渲染速度提升了2-4倍,並大大降低了內存消耗;

  vue中模板轉換成視圖的大致過程是:vue.js 通過編譯將 template 模板轉換成渲染函數(render),執行渲染函數就可以得到一個虛擬的節點;然后在對 model 進行操作的時候,會觸發 Dep 中的 Watcher 對象; watcher 對象會調用相應的 update 來修改視圖,這個過程主要是將新舊虛擬節點進行差異對比,然后根據對比進行 DOM 操作來更新視圖;在這個過程中主要涉及了幾個概念:渲染函數、VNOde虛擬節點、patch(patching算法);

    渲染函數:主要是用來生成 virtual DOM 的;vue 雖然推薦使用 template 來構建頁面,但是其實也是支持直接寫渲染函數的;

    VNode虛擬節點:它是節點描述,可以代表一個真實的dom,最終真實的dom就是通過createElement將VNode渲染成真實的dom的;

    patch(也叫patching算法):它是虛擬dom最核心的部分,VNode最終就是經過這個算法成為真實的dom的,這個過程是對比新舊節點之間的不同,然后根據對比結果找出需要更新的節點進行更新;

 

 

  Virtual DOM 簡單的說就是一顆樹,一顆以javaScript對象(VNode)作為基礎的樹,用對象的屬性來描述節點,因此這個對象至少包含標簽名(tag)、屬性(attrs)、和 子元素對象(chuildren)

  Virtual DOM 的最終目的是將虛擬的節點渲染到視圖上,其實它主要做了兩件事:(1)、提供與真實DOM節點對應的虛擬節點VNode;(2)、將虛擬節點VNode和舊虛擬節點(oldVNode)進行對比,然后更新視圖;

  Virtual DOM 的優勢:

    (1)、具備跨平台的優勢;

    (2)、操作DOM慢,js運行的效率高;vue 將DOM對比放在js層,提高效率,Virtual DOM 本質上其實就是js 和 dom 之間的一個緩存,通過 patching 算法計算出真正需要更新的節點,最大限度的減少DOM操作;

    (3)、提升渲染的性能;dom操作的減少,可以避免更多的回流和重繪等,更加高效的提高性能


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM