美文网首页
虚拟DOM patch之新增、删除节点(一)

虚拟DOM patch之新增、删除节点(一)

作者: 李友胜 | 来源:发表于2019-09-29 23:23 被阅读0次

虚拟DOM最核心的部分是patch,它可以将vnode渲染成真实的DOM。
patch也可以叫做patching算法,通过它渲染真实的DOM时,并不是暴力覆盖原有DOM,而是对比新旧两个vnode之间的不同个,根据对比结果找出需要更新的节点进行更新。其实际作用是在现有的DOM上进行修改来实现更新视图的目的。
之所以这么做,是因为DOM操作的执行速度远不如JavaScript的运算速度快。因此,把大量的DOM操作搬运到JavaScript中,使用patching算法来计算出真正需要更新的节点,最大限度的减少DOM操作,从而显著提升性能。本质上其实使用JavaScript的运算成本来替换DOM操作的执行成本,而JavaScript的运算速度比DOM快很多,这样做很划算,所以才会有虚拟DOM。

patch介绍

对比两个vnode之间的差异只是patch的一部分,这是手段不是目的。patch的目的其实是修改DOM节点。也可以理解成渲染视图。上面说过patch不是暴力替换节点,而是在现有的DOM上进行修改来达到渲染视图的目的。对现有的DOM进行修改需要做三件事:

  • 创建新增的节点;
  • 删除已经废弃的节点;
  • 修改需要更新的节点;
    我们知道patch的过程其实就是创建节点、删除节点和修改节点的过程,接下来主要讨论在上面情况下创建新节点,插入到上面位置;在上面情况下删除节点,删除哪个节点;在上面情况下修改节点,修改哪个节点。
    之所以需要通过算法来比对两个节点的差异,并针对不同的节点进行更新,主要是为了性能考虑。
    我们完全可以把整个旧节点从DOM中删除,然后使用最新状态(state)重新生成一份全新的节点插入到DOM中,这种凡是完全是可以实现功能。
    由于我们最终的目的是渲染视图,所以可以发现渲染视图的标准是以vnode(使用最新状态创建的vnode)来渲染而不是oldVnode。
新增节点

首先,新增节点的一个很明显的场景就是,当oldVnode不存在而vnode存在时,就需要用vnode去生成真实的DOM并插入到视图中去。
这通常会发生在首次渲染中。因为首次渲染时,DOM中不存在任何的节点,所以oldVnode是不存在的。

相关文章

  • 虚拟DOM patch之新增、删除节点(一)

    虚拟DOM最核心的部分是patch,它可以将vnode渲染成真实的DOM。patch也可以叫做patching算法...

  • js dom节点操作

    获取dom节点 新增dom节点 删除dom节点

  • 5-5 DOM结构操作

    5-5 DOM结构操作(新增删除移动,获取父子元素) 新增节点 获取父元素 获取子元素 删除节点 移动 其他比如遍...

  • DOM操作

    DOM 文档对象模型,操作【获取/新增插入/删除/修改/复制/替换】文档中的节点节点:【node】元素节点,文本节...

  • 2021-03-06 虚拟dom - 01

    入口文件 h方法的实现 (创建虚拟节点) 创建虚拟节点 vnode.js patch (render) 将虚拟节点...

  • 认识vue虚拟DOM(三)

    patch介绍 虚拟DOM最核心的部分是patch,它将vnode渲染成真实DOM过程中并不是暴力覆盖原有DOM,...

  • JavaScript基础知识点--DOM操作之节点

    DOM之节点 添加节点 删除节点 修改节点 查找节点 添加节点 create 系列方法 document.crea...

  • js操作DOM

    创建dom 删除一个dom 文档碎片增快速度 dom节点 父节点 子节点 offsetParent 继续子节点 兄...

  • Vue中的Diff算法

    在新老虚拟DOM对比时 首先,对比节点本身,判断是否为同一节点,如果不为相同节点,则删除该节点重新创建节点进行替换...

  • Vue虚拟Dom与diff算法原理

    什么是虚拟DOM? 真实的元素节点: 为什么使用虚拟DOM? 虚拟DOM的作用是什么? 虚拟DOM和真实DOM的区...

网友评论

      本文标题:虚拟DOM patch之新增、删除节点(一)

      本文链接:https://www.haomeiwen.com/subject/exaqpctx.html