虚拟DOM与DOM diff
时间:2021-02-23
本文章向大家介绍虚拟DOM与DOM diff,主要包括虚拟DOM与DOM diff使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
虚拟DOM
是什么:
一个能代表DOM树的对象,含有标签名、标签上属性、事件监听和子元素等等。
优点:
-
减少DOM操作
- 虚拟DOM可以将多次操作合并
- 借助DOM diff,可以省去多余操作,比如添加10个节点,如果借助对比,就可以只操作这10次添加
-
跨平台
虚拟DOM本质是JS对象,可以应用到其他平台。
虚拟DOM的样子:
小缺点:
创建虚拟DOM:
使用React.createElement(),就是使用了额外的创建函数。
但是可以使用JSX简化创建虚拟DOM。
简化后,随之而来也带来额外的工作:因为js需要依赖打包工具来认识JSX
与操作节点的规模有关:
当数据规模不是特别大的时候,虚拟DOM是快的;当规模太大的时候,虚拟DOM的一些操作反而会花更多时间。
DOM diff
每次都比较根节点,然后递归地比较子节点。
-
仅修改了标签上的属性
仅更新对应的DOM属性即可。
-
删除了左子树
DOM diff长什么样:
本质是一个函数,参数是两个虚拟DOM,输出参数是一个补丁,补丁队列是对真实DOM的增量。
patches = ppatch(oldVNode, newVNode)
补丁队列:
patches:
[
{type:'INSERT', vNode:...}
{type:'TEXT', vNode:...}
{type:'PROPS', propsPatch:[]}
]
diff核心逻辑:
Tree diff
- 逐层比较
- 如果是 component,执行 component diff
- 如果是 element,执行 element diff
component diff
- 先看比较双方类型一不一致,不一致直接替换
- 类型相同则更新属性
- 深入组件进行递归 tree diff
element diff
- 先看标签名一不一致,不一致直接替换
- 标签名一致比较属性
- 深入标签进行递归 tree diff
原文地址:https://www.cnblogs.com/peekapoooo/p/14437622.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS6.5平台上rsync服务器安装配置方法简述
- Android使用SlidingPaneLayout 实现仿微信的滑动返回
- wx.CheckBox创建复选框控件并响应鼠标点击事件
- Android 实现右滑返回功能
- PyQt5实现拖放功能
- vue项目中vue-i18n和element-ui国际化开发实现过程
- 原生php实现excel文件读写的方法分析
- Linux中无法远程连接数据库问题的解决方法
- Android仿微信、qq点击右上角加号弹出操作框
- Vue中使用vue-i18插件实现多语言切换功能
- 一步步教你如何开启、关闭ubuntu防火墙
- Android仿微信右上角点击加号弹出PopupWindow
- vue 组件使用中的一些细节点
- PHP设计模式之工厂方法设计模式实例分析
- Android PopupWindow实现微信右上角的弹出菜单