天天看点

Vnode-Vdom-diff算法一、什么是 vnode?二、什么是虚拟DOM?三、什么是diff算法及作用?

文章目录

  • 一、什么是 vnode?
  • 二、什么是虚拟DOM?
  • 三、什么是diff算法及作用?
    • 3.1 源码中for循环时没Key的做法
    • 3.2 有key的diff算法如下(一)
    • 3.3 有key的diff算法如下(二)
    • 3.4 有key的diff算法如下(三)

一、什么是 vnode?

VNode的全称是Virtual Node,也就是虚拟节点(一个节点)

事实上,无论是组件还是元素,它们最终在Vue中表示出来的都是一个个VNode

VNode的本质是一个JavaScript的对象;

Vnode-Vdom-diff算法一、什么是 vnode?二、什么是虚拟DOM?三、什么是diff算法及作用?

二、什么是虚拟DOM?

Virutal dom 多个Vnode形成的树结构。

如果我们不只是一个简单的div,而是有一大堆的元素,那么它们应该会形成一个VNode Tree:

Vnode-Vdom-diff算法一、什么是 vnode?二、什么是虚拟DOM?三、什么是diff算法及作用?
Vnode-Vdom-diff算法一、什么是 vnode?二、什么是虚拟DOM?三、什么是diff算法及作用?

三、什么是diff算法及作用?

举例说明:

有一个数组

arr

渲染到页面上,

arr

:

['a', 'b', 'c', 'd']

现在我们在c的前面插入一个字母

f

,即:

arr.splice(2,0,'f')

不出意外页面上会多出一个

f

那么问题来了,vue是响应式的,它内部是怎么把

f

给插入到以前的数组内的呢?

在生成新的数据:

Vue内部把新生成的 Vnodes 和旧的 Vnodes对比的这个过程就是 diff算法

Vnode-Vdom-diff算法一、什么是 vnode?二、什么是虚拟DOM?三、什么是diff算法及作用?

3.1 源码中for循环时没Key的做法

Vnode-Vdom-diff算法一、什么是 vnode?二、什么是虚拟DOM?三、什么是diff算法及作用?

3.2 有key的diff算法如下(一)

Vnode-Vdom-diff算法一、什么是 vnode?二、什么是虚拟DOM?三、什么是diff算法及作用?

3.3 有key的diff算法如下(二)

Vnode-Vdom-diff算法一、什么是 vnode?二、什么是虚拟DOM?三、什么是diff算法及作用?

3.4 有key的diff算法如下(三)

Vnode-Vdom-diff算法一、什么是 vnode?二、什么是虚拟DOM?三、什么是diff算法及作用?

继续阅读