什么是虚拟DOM?以及diff算法

简介: 什么是虚拟DOM?以及diff算法

真实DOM和虚拟DOM的区别


虚拟DOM是当下两个主流框架vue和react使用到的技术,它到底有什么优缺点可以让两大主流框架所青睐呢?

在了解虚拟DOM之前,我们先了解什么是DOM


   DOM(Document Object Model——文档对象模型)是用来呈现以及与任意 HTML 或 XML文档交互的API。DOM 是载入到浏览器中的文档模型,以节点树的形式来表现文档,每个节点代表文档的构成部分(例如:页面元素、字符串或注释等等)。


上面的解释来源于mdn,看起来很高大上,也很难懂?嗯,官方文档嘛,总归是有些晦涩难懂的?我个人的理解就是DOM是一个js对象,用于操作页面上面的元素。


   DOM用于操作页面上的元素,那么虚拟DOM当然也是用于操作页面上的元素,从字面上来理解,就是

   一个假的DOM,但它同时也是一个可以代替DOM树的一个普通js对象,所以它也包含真实DOM的特性,例如:标签名、标签上的属性、事件监听、子元素等等


既然已经存在DOM对象了,为什么大家还会使用虚拟DOM来代替DOM呢?它有什么优点呢?


   能减少不必要的 DOM 操作,如果你要添加1000个节点,真实DOM会一个一个的替你增加,但是虚拟DOM可以将多次操作合并为一次操作,减少DOM操作的频率,如果在1000个节点中,只有100个是新增的话,那么虚拟DOM也只会操作新增的这100个,这是通过虚拟DOM的diff算法实现的。

   跨平台渲染,由于虚拟DOM实际上还是一个JS对象,所以它也具有跨平台性,不仅可以用于代替DOM,也可以变成小程序,IOS应用,安卓应用。


虚拟DOM和真实DOM的速度对比,没有什么会比直接操作DOM速度更快的,但是DOM操作速度快,但是浏览器渲染却十分耗时,因为它是一个板凳一个钉子的去进行操作元素,浏览器也需要一个板凳一个钉子的去渲染页面,而虚拟DOM通过减少操作频率从而减少浏览器的渲染时间,所以在这种情况下,虚拟DOM的速度其实是高于真实DOM的,但是操作数量十分庞大时,虚拟DOM的速度也会没有真实DOM快。

所以我们可以得到一个结论


   当操作数量十分庞大时,可以选择DOM操作,数量一般时,则可以选择虚拟DOM


上面说了那么所虚拟DOM的优点,那么,虚拟DOM有缺点吗?

当然是有的,虚拟DOM需要额外的创建函数,如react中的createElement和vue中的h函数,vue通过vue-loader,react通过babel来解决这个问题,解决了这个问题的同时也造成了对第三方打包工具的依赖性。


DOM diff 算法


diff算法

这是晚上找的一张比较形象的图片,但是反过来了,还可以将就点看,diff算法就是通过比较新的虚拟DOM和旧的虚拟DOM,找出不同,从而渲染页面。

 

相关文章
|
5月前
|
算法 JavaScript UED
Diff 算法的实现原理
【10月更文挑战第18天】Diff 算法是 Vue.js 中实现高效 DOM 更新的核心机制,通过合理的比较和优化策略,能够在保证界面正确性的同时,最大程度地减少 DOM 操作,提高应用的性能和用户体验。
95 2
|
5月前
|
算法 JavaScript
Vue 中的 Diff 算法
【10月更文挑战第18天】需要注意的是,Diff 算法虽然能够提高性能,但在某些复杂的场景下,可能仍然会存在一些性能瓶颈。因此,在实际开发中,我们需要根据具体情况合理地使用 Diff 算法,并结合其他优化手段来提高应用的性能。
41 1
|
5月前
|
JavaScript 算法 前端开发
vue 中diff算法
【10月更文挑战第10天】
81 1
|
5月前
|
JavaScript 算法 前端开发
【VUE】Vue的diff算法和React的diff算法
【VUE】Vue的diff算法和React的diff算法
|
6月前
|
机器学习/深度学习 JavaScript 算法
面试中的网红虚拟DOM,你知多少呢?深入解读diff算法
该文章深入探讨了虚拟DOM的概念及其diff算法,解释了虚拟DOM如何最小化实际DOM的更新,以此提升web应用的性能,并详细分析了diff算法的实现机制。
|
18天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
100 31
|
8天前
|
算法 数据安全/隐私保护 异构计算
基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比
本项目展示了一种基于FPGA的音频水印算法,采用LSB(最低有效位)技术实现版权保护与数据追踪功能。使用Vivado2019.2和Matlab2022a开发,完整代码含中文注释及操作视频。算法通过修改音频采样点的最低有效位嵌入水印,人耳难以察觉变化。然而,面对滤波或压缩等攻击时,水印提取可能受影响。该项目运行效果无水印干扰,适合实时应用场景,核心逻辑简单高效,时间复杂度低。
|
8天前
|
算法 数据安全/隐私保护
基于GA遗传算法的拱桥静载试验车辆最优布载matlab仿真
本程序基于遗传算法(GA)实现拱桥静载试验车辆最优布载的MATLAB仿真,旨在自动化确定车辆位置以满足加载效率要求(0.95≤ηq≤1.05),目标是使ηq尽量接近1,同时减少车辆数量和布载耗时。程序在MATLAB 2022A版本下运行,展示了工况1至工况3的测试结果。通过优化模型,综合考虑车辆重量、位置、类型及车道占用等因素,确保桥梁关键部位承受最大荷载,从而有效评估桥梁性能。核心代码实现了迭代优化过程,并输出最优布载方案及相关参数。
|
13天前
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
|
7天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于模糊神经网络的金融序列预测算法matlab仿真
本程序为基于模糊神经网络的金融序列预测算法MATLAB仿真,适用于非线性、不确定性金融数据预测。通过MAD、RSI、KD等指标实现序列预测与收益分析,运行环境为MATLAB2022A,完整程序无水印。算法结合模糊逻辑与神经网络技术,包含输入层、模糊化层、规则层等结构,可有效处理金融市场中的复杂关系,助力投资者制定交易策略。

热门文章

最新文章