首页 > 其他分享 >虚拟DOM的概念和原理

虚拟DOM的概念和原理

时间:2022-12-21 15:44:39浏览次数:53  
标签:key DOM patch 虚拟 数组 原理 节点 指针

概念

在vue、react出来之前,都是直接操作DOM,这样会引起重排和重绘。虚拟DOM是简称就是DOM对象,在每次更改的时候,对比新旧DOM对象的差异,然后一次更改,减少了重排和重绘,所以节约了性能。

组成

虚拟dom对象的基本组成是一颗树形结构,主要属性有type、props、children,分别为类型,数据,孩子节点。

diff算法

diff算法是使用虚拟dom节约性能最关键的,它主要的思路是,首先我们将新旧节点当作两个数组,然后有四个分别指向其首尾节点的指针,接着进行比较:
头头对比:对比两个数组的头部,如果相同,就把新节点patch到旧节点,首指针加一
尾尾对比:对比两个数组的尾部,如果相同,就把新节点patch到旧节点,尾指针减一
旧尾新头:交叉对比,旧尾新头,如果找到,把新节点patch到旧节点,旧尾指针前移,新头指针后移
旧头新尾:交叉对比,旧头新尾,如果找到,就把新节点patch到旧节点,新尾指针迁移,旧头指针后移
利用key对比:如果上面的都没有找到,就用新指针对应节点的key去旧数组寻找对应的节点,这里分三种:当没有对应的key,那么创建新的节点,如果有key但是不是相同的节点,创建新节点,如果有key并且相同,就把新节点patch到旧节点。
然后对于特殊情况,如果在旧数组遍历完了后,新数组中还有值,则添加新数组中漏掉的节点。
如果新数组遍历完了,旧数组中还有漏掉的值,就直接删除漏掉的值。

参考文章

标签:key,DOM,patch,虚拟,数组,原理,节点,指针
From: https://www.cnblogs.com/taosifan/p/15329025.html

相关文章

  • AOL开发框架:EBS功能安全性基本原理
    为了方便管理,分类维护,EBS在"用户"和"Forms"之间加了几个层次。考察如下过程:1、 "用户"如sysadmin登录,系统验证其用户名/密码2、 如果OK,系统列出其拥有的所有角色,在EBS中......
  • MySQL xtrabackup 物理备份原理
    一、简介xtrabackup是percona公司开源的MySQLinnodb物理备份工具,支持在线热备(备份时不影响数据读写),在工具在业内生产上被大量使用,本次使用xtrabackup备份的日志和数据......
  • 程序运行原理:程序是如何运行又是如何崩溃的?
    软件的核心载体是程序代码,软件开发的主要工作产出也是代码,但是代码被存储在磁盘上本身没有任何价值,软件要想实现价值,代码就必须运行起来。那么代码是如何运行的?在运行中可能......
  • 论文解读:Open Domain Question Answering Using Early Fusion of Knowledge Bases and
    论文解读:OpenDomainQuestionAnsweringUsingEarlyFusionofKnowledgeBasesandText  知识库问答通常存在一个问题,就是由于知识库不充分导致在一定的推理范围内无......
  • HeapSort堆排序原理与实现
    HeapSort堆排序原理与实现  堆排序是比较重要的数据结构,其主要优点是通过排序二叉树的特性能够记录每个数之间的大小关系,以至于不需要重复比较,对于海量数据排序问题可以减......
  • 每日一题-枚举+乘法原理
    孤独的照片-枚举+乘法原理voidsolve(){ intn; strings; cin>>n>>s; intans=0; for(inti=0;i<n;++i){ intl=i-1,cnt1=0; while(......
  • Ubuntu18.04TLS系统下用Pycharm打开conda虚拟环境编译py文件
    首先找到conda的虚拟环境所在的位置,输入命令行​​condaenvlist​​​,效果如下:绿色为创建虚拟环境的命令,蓝色为虚拟环境的名称,紫色为虚拟环境在Ubuntu18.04TLS系统下的......
  • HttpURLConnection基本工作原理
    运行截图MainActivity.javapackagecsdn.example.com.notification.NetWorkTest;importandroid.os.Bundle;importandroid.support.v7.app.AppCompatActivity;importandr......
  • JDK源码之CompletableFuture(二)链式调用原理
    ​​JDK源码之CompletableFuture(一)结果返回原理​​JDK源码之CompletableFuture(二)链式调用原理JDK源码之CompletableFuture(三)anyOf,allOf是怎么实现的?目录​​一、第一步调......
  • LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue、ConcurrentLinkedQueue
    在jdk中有许多的队列,队列的使用还是有一些难度的,因为涉及到了并发等概念,现在我们列举一下队列的特点:并发情况下不会有线程安全问题队列都有元素都有添加(生产者端使用)、获取(......