欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

vue diff算法源碼

方一強2年前8瀏覽0評論

Vue.js 是一個JavaScript框架,最早由中國大陸的尤雨溪開發。該框架可以用來開發單頁Web應用和跨應用組件。Vue.js使用了MVVM模式,是一款高效、靈活、易于上手的框架。Vue.js之所以能夠快速、高效地渲染數據,就要靠它的Virtual DOM。

Vue.js 中的Virtual DOM 可以理解成是一個虛擬的DOM,它相當于在操作JavaScript對象,這使得Vue.js可以高效地操作大型數據,且不必頻繁的改動真實的DOM。在Vue.js中,Virtual DOM 會被用來進行Diff算法,比較現有虛擬DOM 和新的虛擬DOM,只更新發生變更的地方。

function patch(oldVnode, vnode) {
const isRealElement = oldVnode.nodeType !== undefined
if (!isRealElement && sameVnode(oldVnode, vnode)) {
patchVnode(oldVnode, vnode)
} else {
const oldElm = oldVnode.elm
const parentElm = api.parentNode(oldElm)
createElm(vnode, insertedVnodeQueue)
parentElm.insertBefore(vnode.elm, oldElm.nextSibling)
if (isDef(oldVnode.parent)) {
removeVnodes(oldVnode.parent, [oldVnode], 0, 0)
} else if (isDef(oldVnode.tag)) {
api.removeChild(parentElm, oldVnode.elm)
}
}
}

當我們調用Vue.js 的update( ) 方法,會傳遞舊虛擬DOM和新虛擬DOM兩個參數,Vue.js會比較新舊兩個參數,并執行Diff算法,Diff算法指的是比較兩個虛擬DOM樹的算法。Vue.js的Diff算法也是很高效的一種算法,采用了時間復雜度O(n) 的操作,也就是說,會遍歷整個虛擬DOM樹,而不是只遍歷有差異的部分,這樣可以減少DOM操作,節約時間。

在Vue.js 中,Diff算法不需要考慮整個DOM樹需要做出的哪些更改,而是需要關注哪些組件需要被重新渲染。如果組件的數據沒有發生更改,Vue.js 只需要比較兩個組件的虛擬DOM 是否一致即可,避免沒有必要的虛擬DOM 操作。

在Vue.js 2.0版本中,采用了雙向比較的策略。從parentNode開始比較,先判斷節點是否相等,如果不相等,在比較子節點,如果子節點數量不同,則直接將舊節點全部刪除,創建新節點,如果子節點數量相同,則進行一一比較。如果是文本節點,則比較是否相同。如果是組件節點,則比較組件的虛擬DOM 是否相同。

總的來說,Vue.js的Diff算法對于大型的單頁應用有很好的優化效果。Diff算法采用了快速的雙向比較,減少了虛擬DOM的操作次數,提高了操作的效率。