谈谈Vue中的虚拟dom

Virtual DOM 是什么?

  • Virtual DOM 是一棵以 JavaScript 对象( VNode 节点)作为基础的树,用对象属性来描述节点,它是一层对真实 DOM 的抽象。最终可以通过一系列操作使这棵树映射到真实环境上。
  • 模板 →(compile)→ 渲染函数 →(render) → 虚拟DOM树 →(create)→ 真实DOM的一个过程

Virtual DOM 作用是什么?

  • 虚拟DOM的最终目标是将虚拟节点渲染到视图上

虚拟DOM在Vue.js主要做了两件事

  • 提供与真实DOM节点所对应的虚拟节点vnode
  • 将虚拟节点vnode和旧虚拟节点oldVnode进行对比,然后更新视图

为何需要Virtual DOM?

  • 具备跨平台的优势
  • 提高效率
  • 提升渲染性能

diff 算法(patch的核心)

  • 找出本次DOM需要更新的节点来更新,其他的不更新
  • 基于snabbdom改造,仅在同级的vnode间做diff,递归地进行同级vnode的diff,最终实现整个DOM树的更新

diff 算法包括几个步骤

  • 用 JavaScript 对象结构表示 DOM 树的结构;然后用这个树构建一个真正的 DOM 树,插到文档当中
  • 当状态变更的时候,重新构造一棵新的对象树。然后用新的树和旧的树进行比较,记录两棵树差异
  • 把所记录的差异应用到所构建的真正的DOM树上,视图就更新了

diff 算法的实现过程

  • patch(container,vnode) :初次渲染的时候,将VDOM渲染成真正的DOM然后插入到容器里面
  • patch(vnode,newVnode):再次渲染的时候,将新的vnode和旧的vnode相对比,然后之间差异应用到所构建的真正的DOM树上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaobangsky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值