從Vue的DOM構建機制中理解key

2021-09-26 20:01:50 字數 733 閱讀 8219

在diff演算法中,他只會對同級的dom元素進行比較,例如:

改變後:

這個時候最好的解決方法是將原來的標籤移動到改變後的位置,但diff演算法不這麼做,它首先會比較每一層的變化,就如上面的例子,他的做法是把第三層的標籤先刪掉,再在第二層裡建立乙個.那麼在同層比較中:「如果節點型別不同,直接乾掉前面的節點,再建立並插入新的節點,不會再比較這個節點以後的子節點了。如果節點型別相同,則會重新設定該節點的屬性,從而實現節點的更新」

說了這麼多,可以告訴你key到底是幹嘛的用的了!

我們希望可以在b和c之間加乙個f,diff演算法預設執行起來是這樣的:

所以我們需要使用key來給每個節點做乙個唯一標識,diff演算法就可以正確的識別此節點,找到正確的位置區插入新的節點。

對於vue虛擬dom的理解

虛擬dom就是為了解決瀏覽器效能問題而被設計出來的。例如,若一次操作中有10次更新dom的動作,虛擬dom不會立即操作dom,而是將這10次更新的diff內容儲存到本地乙個js物件中,最終將這個js物件一次性attch到dom樹上,再進行後續操作,避免大量無謂的計算量。簡單來說,可以把virtual...

對vue虛擬dom的理解

1為什麼使用虛擬dom 因為在開發中,操作原生dom是非常消耗效能的,如果某個節點發生改變時,整個容器中的內容都要被重新渲染。而虛擬dom可以很好地解決這個問題。如果一次操作中有10次更新dom的操作,虛擬dom不會立即操作dom,而是將這10次更新的diff內容儲存在本地的乙個js物件中,最終將這...

Vue中的虛擬DOM

眾所周知,在網頁中最大的開銷就是dom操作,dom很慢而且非常龐大。原生 js 或 jq 操作dom時,瀏覽器會從構建dom樹開始從頭到尾執行一遍流程。在一次操作中,我需要更新10個節點,瀏覽器不知道共有10個節點要更新,就會執行10次更新操作,浪費效能,使頁面出現卡頓,影響使用者體驗。於是,就出現...