虛擬dom diff演算法

2021-09-24 17:17:30 字數 1918 閱讀 5073

通過render函式解析jsx,將其轉換成 vdom結構

var vdom = ,

content: []}

]}

初次渲染 vdom( vdom渲染成 真實dom )

render函式

資料更改了

data.name = '駿哥'

vdom = ,

content: []}

]}

使用diff演算法比對兩次vdom,生成patch物件

diff演算法是比較兩個檔案的差異,並將兩個檔案不同之處,將這個不同之處生成乙個補丁物件(patch) 

diff演算法**後端

前端將其應用於虛擬dom的diff演算法

vue中將 虛擬dom的diff演算法放在了 patch.js檔案中

使用js來進行兩個物件的比較( vdom 物件模型)

diff演算法是同級比較

給每乙個層級打乙個標記,這個標記是乙個數字( 這個數字就是 key )

根據key將patch物件渲染到頁面中改變的結構上,而其他沒有改變的地方是不做任何修改的( 虛擬dom的惰性原則 )

diff演算法是什麼?

diff演算法執行結束之後,返回什麼?

注意: vue是一是mvvm框架,vue高效能的原因之一就是vdom

什麼是jsx?

6.key是幹什麼用的?

修改樣式

刪除

new vue(,]},

methods: ,

remove ( index ) }})

7.驗證 key

8.為什麼列表迴圈要加key ?

vue中列表迴圈需加:key=「唯一標識」 唯一標識可以是item裡面id index等,因為vue元件高度復用增加key可以標識元件的唯一性,為了更好地區別各個元件 key的作用主要是為了高效的更新虛擬dom

為什麼要使用元件?

元件化

要想實現元件化,那麼我們使用的這一部分就必須是完整的,我們把這個完整的整體就稱之為元件

外掛程式: index.html img css js

如果能將 html css js img 等多個部分放在一起,那該有多好,vue將這個聚合體的檔案稱之為,單檔案元件( xx.vue )

2.基礎的元件建立

全域性註冊

ue.component('father',)

new vue(

}})

區域性註冊

在元件中用乙個components的配置專案來表示

只能在註冊的範圍內使用,其他地方是不能使用的

var hello = vue.extend()

new vue(

})new vue()

3.元件的巢狀

4.vue是如何擴充套件元件的

5.vue為什麼要以標籤的形式使用元件

6.元件使用為何要註冊

7.元件的一些特殊使用規則 【 is 規則】

8.元件的template

template使用:

例項範圍內使用

template中的內容被當做乙個整體了,並且template標籤是不會解析到html結構中的

例項範圍外使用

例項範圍外template標籤是不會被直接解析的

元件要想使用template使用,我們採用第二種

但是使用第二種template使用後,有個弊端,template標籤結構會在html檔案中顯示

解決: 使用webpack、gulp等工具編譯,將來要用vue提供的單檔案元件

vue.component('hello',)

new vue()

虛擬dom diff演算法

虛擬dom是什麼?需求 有乙個變數 count 的初始值時 0,經過一系列運算,得到10001,然後將結果寫入box中 var box document.queryselector box 我們可能會這麼寫 var count 0 console.time a for var i 0 i 10001...

虛擬Dom diff演算法

1.虛擬dom樹的遍歷 2.parent節點下的children的比較 3.diff完成之後對真實3.dom的操作時機 虛擬dom的遍歷 虛擬dom說到底只是一顆樹形結構,對於樹的遍歷我們知道有深度遍歷和廣度遍歷 一 指代不同 1 深度優先遍歷 是對每乙個可能的分支路徑深入到不能再深入為止,而且每個...

虛擬dom diff演算法

千鋒逆戰班,rayson.jin學習打卡!今天給大家介紹一下虛擬dom和diff演算法。1.它是乙個object物件模型,用來模擬真實dom節點的結構 虛擬dom其實是裡面記憶體型物件 js記憶體物件 屬於記憶體資料 真實dom的一層對映 2.提供一種方便的工具,使得開發效率得到保證 3.保證最小化...