1. 程式人生 > >Vue虛擬Dom,物件開發等!!

Vue虛擬Dom,物件開發等!!

資料雙向繫結的原理:

vue實現雙向資料繫結的原理就是利用了 Object.defineProperty() 這個方法重新定義了物件獲取屬性值(get)和設定屬性值(set)的操作來實現的。

虛擬Dom:

簡單來說,虛擬DOM是用Object來代表一顆節點,這個Object叫做VNode,然後使用兩個VNode進行對比,根據對比後的結果修改真實DOM。

為什麼是兩個VNode?因為每次渲染都會生成一個新的VNode,然後和上一次渲染時用的VNode進行對比。然後將這一次新生成的VNode快取,用來進行下一次對比。

物件開發:

有很多時候我們發現,有些開發人員很多時候將標籤的屬性寫在data裡面和用js來生成標籤等操作,這是為什麼呢?

現代 Web 頁面的大多數邏輯的本質就是不停地修改 DOM,但是 DOM 操作太慢了,直接導致整個頁面掉幀、卡頓甚至失去響應。然而仔細想一想,很多 DOM 操作是可以打包(多個操作壓成一個)和合並(一個連續更新操作只保留最終結果)的,同時 JS 引擎的計算速度要快得多,能不能把 DOM 操作放到 JS 裡計算出最終結果來一發終極 DOM 操作?答案——當然可以!所以原因就是他可以提升頁面效能,

vue中的物件:

其實vue的操作就是將我們寫的template裡面的dom,通過rander函式來轉化成類似與物件生成標籤的寫法來比較虛擬dom,所以如果我們直接寫成物件樹的方法代替我們直接在template裡面寫標籤,將會提升我們頁面的很多效能,(個人瞎寫的,未了方便以後自己看了能理解)

Vue的一個厲害之處就是利用Virtual DOM模擬DOM物件樹來優化DOM操作的一種技術或思路。

Vue原始碼中虛擬DOM構建經歷 template編譯成AST語法樹 -> 再轉換為render函式 最終返回一個VNode(VNode就是Vue的虛擬DOM節點) 

在Vue的mount過程中,template會被編譯成AST語法樹,AST是指抽象語法樹(abstract syntax tree或者縮寫為AST),或者語法樹(syntax tree),是原始碼的抽象語法結構的樹狀表現形式。

具體實現程式碼可以看Vue原始碼,或者https://segmentfault.com/a/1190000011531094#articleHeader0