色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

vue diff算法源碼

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

Vue.js 中的Virtual DOM 可以理解成是一個(gè)虛擬的DOM,它相當(dāng)于在操作JavaScript對象,這使得Vue.js可以高效地操作大型數(shù)據(jù),且不必頻繁的改動(dòng)真實(shí)的DOM。在Vue.js中,Virtual DOM 會(huì)被用來進(jìn)行Diff算法,比較現(xiàn)有虛擬DOM 和新的虛擬DOM,只更新發(fā)生變更的地方。

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)
}
}
}

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

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

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

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