Vue中的虚拟DOM

Vue 的虚拟 DOM 是什么? 虚拟 DOM 是一种在内存中表示真实 DOM 的数据结构。它是一个轻量级的 JavaScript 对象,包含了 DOM 节点的相关信息。通过对虚拟 DOM 的操作,可以减少直接对真实 DOM 的操作,从而提高性能和效率。虚拟 DOM 是 Vue.js 中一个重要的技术,它通过在内存中创建一个轻量级的 DOM 表示,优化了 UI 更新的性能和开发者体验。通过理解虚拟 DOM 的工作原理和实现细节,开发者可以更好地利用 Vue 的特性,构建高效、可维护的前端应用。 阅读详情

在聊虚拟DOM 之前,我们先来说说真实DOM。真实DOM渲染浏览器的步骤如下:
第一步,用HTML分析器,分析HTML元素,构建一颗DOM树。

第二步,用CSS分析器,分析CSS文件和元素样式,生成页面样式表。

第三步,将DOM树和样式表,关联起来,构建一颗Render树。每个DOM节点都有attach方法,接受样式信息,返回一个render对象。这些render对象最终会被构建成一颗Render树。

第四步,有了Render树,浏览器开始布局,为每个Render树上的节点确定一个在显示屏上出现的精确坐标。

第五步,Render树和节点显示坐标都有了,就调用每个节点paint方法,把它们绘制出来,最终渲染浏览器成功。

接下来我们再来看一段代码:如下所示
在这里插入图片描述
经过对比我们发现,上面一段代码执行1000次代码只需要0.3ms,而下面一段代码执行1000次代码需要35ms。代码量看起来差不多,但是效率为何相差如此多。这个就是真实DOM与虚拟DOM的差别了。上一段代码其实是操作虚拟DOM,下一段代码操作的真实DOM。

用原生JS或JQ操作真实DOM时,浏览器会从构建DOM树开始从头到尾执行一遍流程。在一次操作中,我需要更新10个DOM节点,浏览器收到第一个DOM请求后并不知道还有9次更新操作,因此会马上执行流程,最终执行10次。例如,第一次计算完,紧接着下一个DOM更新请求,这个节点的坐标值就变了,前一次计算为无用功。计算DOM节点坐标值等都是白白浪费的性能。即使计算机硬件一直在迭代更新,操作DOM的代价仍旧是昂贵的,频繁操作还是会出现页面卡顿,影响用户体验。

而虚拟的DOM的核心思想是:对复杂的文档DOM结构,提供一种方便的工具,进行最小化地DOM操作。这句话,也许过于抽象,却基本概况了虚拟DOM的设计思想。
(1) 提供一种方便的工具,使得开发效率得到保证
(2) 保证最小化的DOM操作,使得执行效率得到保证

也就是说,虚拟dom的框架/工具都是这么做的:

  1. 根据虚拟dom树最初渲染成真实dom
  2. 当数据变化,或者说是页面需要重新渲染的时候,会重新生成一个新的完整的虚拟dom
  3. 拿新的虚拟dom来和旧的虚拟dom做对比(使用diff算法)。得到需要更新的地方之后,更新内容

这样的话,就能大量减少真实dom的操作,提高性能。

我们来看一下虚拟DOM渲染的步骤,如下代码所示:
在这里插入图片描述
虚拟DOM的Diff算法:虚拟DOM中,在DOM的状态发生变化时,虚拟DOM会进行Diff运算,来更新只需要被替换的DOM,而不是全部重绘,在Diff算法中,只平层的比较前后两棵DOM树的节点,没有进行深度的遍历。

1.如果节点类型改变,直接将旧节点卸载,替换为新节点,旧节点包括下面的子节点都将被卸载,如果新节点和旧节点仅仅是类型不同,但下面的所有子节点都一样时,这样做也是效率不高的一个地方。
2.节点类型不变,属性或者属性值改变,不会卸载节点,执行节点更新的操作。
3.文本改变,直接修改文字内容。
4.移动,增加,删除子节点时:

如果想在中间插入节点F,简单粗暴的做法是:卸载C,装载F,卸载D,装载C,卸载E,装载D,装载E。如下图:
在这里插入图片描述
写代码时,如果没有给数组或枚举类型定义一个key,就会采用上面的粗暴算法。
如果为元素增加key后,Vue就能根据key,直接找到具体的位置进行操作,效率比较高。如下图:
在这里插入图片描述
总结的来说:

内部当数据变化,生成一颗新的虚拟dom树,与上一次的虚拟dom树结构进行对比。也就是说,当数据变化的时候,大量操作的是虚拟dom,而虚拟dom属于内存数据,操作起来性能要高的多。而真实的dom操作,只有在追加的那一刻才会进行操作,所以操作虚拟DOM大大提升了性能。

Kubernetes集群环境搭建与初始化 Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。 阅读详情

相关推荐

android广告SDK原理详解(附源码)

广大的开发者吃糠咽菜开发了一两款APP,获取了一些流量后自然就会想到流量变现,一般情况下大家会选择到百度联盟或者Google Admob这些广告服务提供商注册开发者账号,在自己的APP里面加上几行广告位代码,集成他们的广告SDK包。然后谋事在人,成事在天,只有每天看报表查查收益。   也有一些开发者为了能够提高自己的变现水平,同时接入了好几家的sdk,哪家出的收益高一点我就出哪家的广告,但是这

rmcgogo的博客 1万+

vue创建dom的方法有哪些

以上示例展示了在Vue的created生命周期钩子函数中使用不同方法来创建DOM的方式。根据具体需求和场景,选择适合的方法来创建DOM。

m0_74265396的博客 1351

sqoop抽取mysql的数据到hive表里面,字段内容被自动截取,导致字段不全的问题解决

今天央视重新转播NBA,写篇博客纪念一下这个重要的日子,湖人的表现就呵呵了!!!! 强行转到博客的主题来 mysql的字段属性:该字段能存下的值比如:“山东” `province` varchar(3) NOT NULL COMMENT '省份' 用sqoop sqoop import --connect "jdbc:mysql://xxxxxx:3306/xxxxxx?tinyInt1isBit=false&zeroDateTimeBehavior=convertToNull..

放肆桀骜 965

Vue教程十二——虚拟DOM

虚拟DOM 在此章节,讲解一下关于Vue虚拟DOM的知识点。 那什么是虚拟DOM呢,这里了解一下页面渲染的过程。 页面渲染 当我们请求页面时,HTTP请求返回就会返回页面HTML数据: 1、首先会将HTML信息构建成DOM节点树 2、之后将CSS样式构建成CSSOM树 3、之后将上面的两棵树结合形成一个render树 4、最后将render树加载到浏览器页面上 注意,这是一个极其复杂耗时的过程,假如我们执行操作,一次改一点,一次改一点,那么就需要一遍又一遍的执行上面的页面渲染,页面就会卡死,所以Vue就是

ruby___ruby的博客 404

物体检测之非极大值抑制:NMS、softNMS、softerNMS、IoU-Net

当前的物体检测算法为了保证召回率,对于同一个真实物体往往会有多个的候选框输出。由于多余的候选框会影响检测精度,因此需要利用NMS过滤掉重叠的候选框,得到最佳的预测输出。当前有如下几种较为常见的NMS方法, 1.基本NMS 非极大值抑制, 顾名思义就是抑制不是极大值的边框,这里的抑制通常是直接去掉冗余的边框。 这个过程涉及以下两个量化指标: 1.预测得分:NMS假设一个边框的预测得分越高,这个框...

LeoLee 1944

YOLOv5模型转换陷阱:从PT到RKNN的置信度异常与乱框问题深度解析

本文深度解析了YOLOv5模型从PT到RKNN转换过程中的置信度异常与检测框错乱问题,揭示了NPU硬件特性与模型结构不匹配的根本原因。通过详细的解决方案和实操步骤,包括模型修改、转换流程配置和验证技巧,帮助开发者有效解决这一常见部署难题,提升模型在瑞芯微芯片上的推理性能。

weixin_29062255的博客 907

直接操作DOM一定比虚拟DOM操作耗时,diff算法,key值,虚拟 DOM的定义

直接操作DOM一定比虚拟DOM操作耗时吗? 或者一次直接DOM操作一定比一次虚拟DOM操作耗时吗? 1)虚拟DOM的本质就是一个JS对象,虚拟DOM减少了真实DOM的操作,当修改数据的时候,就是修改虚拟DOM产生全新的虚拟DOM, 新旧虚拟DOM使用diff算法,得到patch(也就是需要修改的部分),然后将这个patch打到浏览器的DOM上 (减少重绘和回流,从而达到性能优化的目的...

感恩、奋进、自信 3145

C语言实现定时任务

例:设置定时任务,每周周X的X时X分自动重启系统 思路:将设置好的重启时间保存到本地配置文件中,设置定时器定时一分钟,每一分钟信号触发一次事件,事件函数中获取配置文件信息与当前系统时间信息,将两个时间进行时间差计算,符合条件的自动重启系统. //创建定时器函数(通过信号触发事件timer_task函数启动) int create_timer() { struct sigevent evp; int ret = 0; memset(&evp, 0, sizeof(stru

佳佳鸽的博客 5037

虚拟DOM详细说明

虚拟DOM技术在页面需要频繁重新渲染页面时,能够高效的定位差异节点,完成渲染。但是在页面更新不频繁渲染速度跟直接操作DOM的方案速度差不多,甚至在节点变化特别小的页面速度并不如直接操作DOM。所以在日常开发工作中不同的开发项目要根据相应的需求类型来选择合适的操作技术开发。

qq_43774332的博客 628

泰凌微8258入门教程 环境篇④——开发板+烧录器 8258mesh新手套件购买

工欲善其事,必先利其器。 淘宝链接:https://item.taobao.com/item.htm?

4130

Autosar Configuration(十四)SomeIP之配置SoAd

本文主要介绍SomeIp协议栈中的SoAd在Configurator中的详细配置

king110108的专栏 2602

虚拟dom和直接操作dom_DOM操作入门指南

虚拟dom和直接操作domDOM Manipulation can make web applications customizable and the data of the webpage can be updated without refreshing the page. By DOM manipulation we can add, change and remove any HTML ...

weixin_26738395的博客 1046

【2024遥感应用组一等奖】基于时空融合和水量平衡法的若尔盖高原水源涵养功能评价

考虑到水源涵养的概念和尺度特征、数据的可获得性、模型的模拟精度等,构建了一种基于遥感、气象和水量平衡原理的草原湿地水源涵养评价方法,估算若尔盖湿地近23年(2000-2022)来的水源涵养量。若尔盖湿地是我国黄河源区的重要水源地,所以本研究以若尔盖湿地的水源涵养功能评估为科学问题,基于遥感数据、GIS数据等,利用水量平衡原理,发展计算简单、便捷、数据易获取的“水源涵养估算方法”,科学估算若尔盖湿地水源涵养服务量,探究其时空动态变化趋势及其影响因素;公式中,Z1和Z2为两个不同高度面的高度,u为摩擦速率;

JData_Engineer的博客 240

【Vuejs】571- Vue 虚拟DOM和Diff算法源码解析

该篇文章主要围绕以下几个问题展开,我们可以带着以下疑问去读文章,帮我们更快速建立起vue相关的知识架构体系:什么是虚拟Dom为什么使用虚拟Dom真实Dom和虚拟Dom的区别Dom Dif...

pingan8787 542

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

vue中的虚拟dom

目录 vue为什么引入虚拟DOM? vue中虚拟DOM干了啥? vue中的虚拟DOM如何创建的? vue中的Vnode类 patch 创建新增节点 删除废弃节点 修改需要更新的节点 vue中虚拟DOM的优化 具体思路 具体实现 vue为什么引入虚拟DOM? vue1.0响应式粒度太细,Object.defineProperty()每个数据的修改都会通知watcher,进而通知do...

yuan_me_da的博客 3870

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Vue中的虚拟dom

我又来了,这是Vue面试的最后一招,当然也是极其简单了,先说Virtual Dom,来一句概念: 用js来模拟DOM中的节点。传说中的虚拟DOM。 再来一张图:    是不是一下子秒懂 没懂再来一张  Virtual Dom就先这样,理解了就OK,下面我们了解一下Diff,老规矩先来一句概念: diff算法就是进行虚拟节点对比,并返回一个patch对象,用来存储两个节点不同的地方,最后用patch记录的消息去局部更新Dom。 换句人话 diff的过程就是调用名为patch的函数,比较新旧节点

田兴的博客 7616

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

vue虚拟Dom详解

虚拟dom本质上是一个js对象,用来描述视图的界面结构,在vue中,每个组件都有一个render函数,每个render函数都会返回一个虚拟dom树,这意味着每个组件都对应着一颗虚拟dom树 在vue中,渲染视图会调用render函数,这种渲染不仅发生在组件创建的时候,还发生在视图依赖的数据更新的时候,如果在渲染时,直接使用真实dom,由于真实dom的创建,更新,插入会带来大量的性能消耗,从而就会极大地降低渲染效率,因此,vue在渲染时,使用虚拟dom来替代真实dom主要是解决渲染效率的问题每个组件实例首次被

不是程序猿呀的博客 7047

什么是虚拟DOM?Vue是如何使用虚拟DOM的?

虚拟DOM是现代前端框架提高性能的重要手段,在Vue中也扮演着至关重要的角色。通过虚拟DOM的机制,Vue能够有效地管理视图更新,减少不必要的DOM操作,从而提升用户体验。通过本文的讲解和示例代码,你应该对虚拟DOM有了初步的了解,并且知道如何在Vue中使用它。希望这篇文章能帮助你在以后的开发中更好地利用Vue的虚拟DOM特性,提高应用的性能和响应速度。最后问候亲爱的朋友们,并邀请你们阅读我的全新著作书籍详情。

有我更精彩的博客 1856

vuejs源码之虚拟dom中的vnode

在vuejs中,有一个Vnode类使用它可以实例不同类型的vnode实例,而不同类型的vnode实例各自表示不同类型的dom元素。例如dom元素有文本节点,元素节点,注释节点等。tag?children?text?。。这是vnode的构造函数。他其实是一个js节点描述对象。描述了怎么样去创建真实的dom节点。

风烟 770

Vue中对虚拟DOM的理解

作为现代前端开发中的主流框架之一,Vue.js是一个非常流行的JavaScript框架,其核心概念之一就是虚拟DOM(Virtual DOM)。在本篇文章中,我们将深入探讨Vue中虚拟DOM的概念,并讨论为什么它在前端开发中如此重要。

有我更精彩的博客 2165

vuejs中虚拟DOM及diff算法

vuejs中虚拟DOM及diff算法 虚拟DOM及diff算法 虚拟DOM(virtual dom) 用一个简单的对象去代替复杂的dom对象,存储了对应dom的一些重要参数,在改变don之前,会先比较相应虚拟dom的数据,如果需要改变,才会将改变应用到真实dom上 Diff算法(差异算法) Diff算法(差异算法):可以用新渲染的对象树去和旧的树进行对比,记录这两棵树差异,记录下来的不同就是我们需要对页面真正的DOM操作,然后把它们应用在真正的DOM树上,页面就变更了,这样就可以做到:视图的结构确实是

FengYang_的博客 200

vue 虚拟dom的实现原理

vue 虚拟dom实现原理前言一、真实DOM和其解析流程二、Virtual DOM 作用是什么?三、虚拟DOM实现 前言 Vue.js 2.0引入Virtual DOM,比Vue.js 1.0的初始渲染速度提升了2-4倍,并大大降低了内存消耗。那么,什么是Virtual DOM?为什么需要Virtual DOM?它是通过什么方式去提升页面渲染效率的呢?这是本文所要探讨的问题。 一、真实DOM和其解...

m0_46434460的博客 5547

Vue 的虚拟 DOM

虚拟 DOM 并非真正的 DOM,而是一个 JavaScript 对象树,用于描述真实 DOM 的结构和内容。它包含了真实 DOM 节点的所有信息,例如标签名、属性、文本内容等。

weixin_46074818的博客 1709
上一篇: 聊聊JavaScript闭包
下一篇: Vue的生命周期
前端工程狮-欧YY
博客等级 码龄7年 1粉丝 3原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值