虚拟DOM与diff算法
虚拟DOM与diff算法
虚拟DOM
- 在DOM操作中哪怕我们的数据,发生了一丢丢的变化,也会被强制重建整预DOM树。这么做,涉及到很多元素的重绘和重排,导致性能浪费严重
只要实现按需更新页面上的元素即可,只需要把修改的数据,所对应的DOM元素重新构建一下,其它没有变化的数据,所对应的DOM节点不需要被强制更新
- 如何按需更新页面上的元素
只需拿到页面被更新前的内存中的DOM树,同时,再拿到页面更新前,新渲染出来的内存DOM树,然后,对比这两棵新旧DOM树,只需要找到那些需要被重新创建和修改的元素即可,这样就能实现DOM的按索更新
- 如何从浏运器的内存中获取到浏览器自己私有的那两颗DOM树?
如果要拿浏览器中的DOM树,我们必须要调用浏态器提供的相关Js的API才可以,但是浏器井没有提供这样的API,所以我们需要自己模拟这两棵新旧DOM树
- 问题:如何自己模拟新旧两棵DOM树?
手动模拟DOM树的原理:使用JS创建一个对象,用这个对象,来模拟每个DOM节点,然后在每个DOM节点中,又提供了类似于children这样的属性,来描述当前DOM的子节点,当DOM节点形成了嵌套关系,就模拟出了一颗DOM树;
虚拟DOM的本质:就是使用Js对象来模拟DOM树。
点拟DOM的目的:为了实现DOM节点的高效更新。
diff算法
- tree diff fDOM树,逐层对比的方式,就叫做tree diff每当我们从前到后,把所有层的节点对比完后,必然能够找到那些需要被更新的元素;
- component diff :在对比每一层的时候,组件之间的对比,叫做component diff.当对比组件的时候,如果两个组件的类型相同,则暂时认为这个组件不需要被更新,如果组件的类型不同,则立即将旧组件移除,新建一个组件,替换到被移除的位置;
- element diff.在组件中,每个元素之间也要进行对比,那么,元素级别的对比,叫做element diff;key : key这个属性,可以把页面上的DOM节点和虚拟DOM中的对象,做一层关联关系;

虚拟DOM与diff算法的更多相关文章
- 【React 7/100 】 虚拟DOM和Diff算法
虚拟DOM和Diff算法 React更新视图的思想是:只要state变化就重新渲染视图 特点:思路非常清晰 问题:组件中只有一个DOM元素需要更新时,也得把整个组件的内容重新渲染吗? 不是这样的 理想 ...
- vue虚拟dom和diff算法
vue的虚拟dom和diff算法 1.虚拟dom 虚拟dom,我的理解就是通过js对象的方式来具体化每一个节点,把dom树上面的每个节点都变为对象里的一个元素,元素的子元素变为子节点,节点上面的cla ...
- 深入理解react中的虚拟DOM、diff算法
文章结构: React中的虚拟DOM是什么? 虚拟DOM的简单实现(diff算法) 虚拟DOM的内部工作原理 React中的虚拟DOM与Vue中的虚拟DOM比较 React中的虚拟DOM是什么? ...
- 虚拟dom与diff算法 分析
好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM
- react中虚拟dom的diff算法
.state 数据 .jsx模板 .生成虚拟dom(虚拟DOM就是一个js对象,用它来描述真实DOM) ['div', {id:'abc'}, ['span', {}, 'hello world']] ...
- vue之虚拟DOM、diff算法
一.真实DOM和其解析流程? 浏览器渲染引擎工作流程都差不多,大致分为5步,创建DOM树——创建StyleRules——创建Render树——布局Layout——绘制Painting 第一步,用HTM ...
- 【前端知识体系-JS相关】虚拟DOM和Diff算法
1.介绍一下vdom? virtual dom, 虚拟DOM 使用JS来模拟DOM结构 DOM变化的对比,放在JS层来做(图灵完备语言),提高效率 DOM操作非常昂贵(消耗性能) 2.Snabbdom ...
- 【React自制全家桶】二、分析React的虚拟DOM和Diff算法
一.React如何更新DOM内容: 1. 获取state 数据 2. 获取JSX模版 3. 通过数据 +模版结合,生成真实的DOM, 来显示,以下行代码为例(简称代码1) <div id= ...
- 探究虚拟dom与diff算法
一.虚拟DOM (1)什么是虚拟DOM? vdom可以看作是一个使用javascript模拟了DOM结构的树形结构,这个树结构包含整个DOM结构的信息,如下图: 可见左边的DOM结构,不论是标签名 ...
随机推荐
- Swoole实时任务异步调用Demo
server.php <?php class Server { private $serv; private $logFilePath = "/data/wwwroot/houtai/ ...
- File、Blob、ArrayBuffer等文件类的对象有什么区别和联系
前言 在前端中处理文件时会经常遇到File.Blob.ArrayBuffer以及相关的处理方法或方式如FileReader.FormData等等这些名词,对于这些常见而又不常见的名词,我相信大多数人对 ...
- centos8安装php7.4
一,下载php7.4 1,官方网站: https://www.php.net/ 2,下载 [root@yjweb source]# wget https://www.php.net/distribut ...
- ffmpeg实现视频文件合并/截取预览视频/抽取音频/crop(裁剪)(ffmpeg4.2.2)
一,ffmpeg的安装 请参见: https://www.cnblogs.com/architectforest/p/12807683.html 说明:刘宏缔的架构森林是一个专注架构的博客,地址:ht ...
- PHP出现access denied问题及解决办法
配置好PHP环境后,访问页面,页面上只出现了 Access denied字样. 问题分析 打开 /usr/local/php/etc/php.ini 文件,找到 cgi.fix_pathinfo ; ...
- 学习python须知,Python基础进阶需掌握哪些知识点?
Python基础进阶需要掌握哪些知识点?Python将是每个程序员的标配,有编程基础再掌握Python语言对于日后的升职加薪更有利.Python语言简洁利于理解,语法上相对容易能够让开发者更专注于业务 ...
- Rest Framework设计规范
Rest Framework Rest Framework是前后端分离中用到的一种规范,它与框架本身无关,是一种软件架构风格,全称为Representational State Transfer. R ...
- JS初级运算符优先级
该图优先级由 高到低 显示
- was 发布版本的步骤:
was 发布版本的步骤:实际使用:1.备份应用 (备份应用下的war包,tar -czvf app.20200418.tar.gz app.war)2.停服务(was 控制台停,方便)3.替换该版本文 ...
- BlockCanary界面卡顿检测
添加依赖: implementation 'com.github.markzhai:blockcanary-android:1.5.0' 运行后会同时安装检测工具,主要检测UI线程运行卡顿现象 pub ...