React Virtual DOM前端框架全面分析

 更新时间:2023年05月23日 09:44:45   作者:陆荣涛  
这篇文章主要为大家介绍了React Virtual DOM前端框架全面分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

可能的原因是以前学习框架的时候只学语法和原理不明白,被问到使用框架有什么好处也回答不上来,正是因为这种情况,所以今天要来探讨一下Virtual DOM的作用原理。

在了解Virtual DOM之前什么是DOM吧!

DOM是什么?

文件模型(Document Object Model,DOM) HTML、XML 和 SVG 文件的程序介面。它提供了文件(树)的程序的文件表示方法,并定义了访问并改变文件架构、风格和内容的方法。(摘取自MDN的部分说明)

由下图可以知道DOM是树状结构从文档根结点向下延伸,下面依附了很多节点

引用MDN的图纸

我们经常利用js来操作DOM更新浏览器在更新触发画面的重新声明,当回流时间以及回流(重)这两个更新机制。

  • 重绘

画面元素更换样式的时候就触发(background-color、color…)

  • 回流

更改画面的操作结构(结构排列)触发(更改视窗大小,css属性:position、width、height…)

很简单,这是一个很正常的运行原因,它是一个非常重要的播放器就可以只更新需要异动的部分。

Virtual DOM的流程

1、什么东西使用setState()方法的时候,React 会先复制一个dom(即为Virtual DOM )

2、的改变时,会比对先前的虚拟 DOM 和当前的虚拟 DOM 区别,当重新行动组件的不同状态

3、Virtual DOM 先用的演算法(diff算出实际的部分,比对之后的不同,再动真实的DOM,有效减少自己的出现),去提高需要更新的效果。

一般这是的html结构

<div id="header">   
  <h1 class="title">苹果</h1> 
  <p class="content">柠檬</p> 
</div>

这是Virtual DOM的结构,是JavaScript模拟出来的物件,会以下面的格式储存起来

{
    tag: "div",
    props: {
        id: "header"
    },
    children: [
        {
            tag: "h1",
            props: { className: "title" },
            children: ["Apple"]
        }, {
            tag: "p",
            props: { className: "content" },
            children: ["lemon"]
        }
    ]
}

简单模拟一下虚拟dom的流程

1、createELement :先使用Virtual DOM提供的createELement方法來生成真是DOM

var count = 0;
var tree = render(count);
var rootNode = createElement(tree);
document.body.appendChild(rootNode);

2、当count变动时 Virtual DOM进行对比 再将差异patch到真实的DOM

count++
var newTree = render(count);
var patches = diff(tree, newTree);
rootNode = patch(rootNode, patches);
tree = newTree;

什么是patch?patch指的是在原有的DOM结构上做异动

关于diff算法

图片来源https://www.cronj.com/blog/di...

传统的diff演算法复杂度为O(n³) 处理100个节点对100万次的比值,Virtual DOM的diff演算算法为O(n)与传统的差异化预测下:

1、Virtual DOM比较相同层级的节点

2、同一层的同一节点再次出现一个唯一的关键,就是避免移动被再次创建。

3、如果发现不见了其子节点也会一并消除,不会再做比对 开发者只要在数据逻辑上运行一次更新机制全部自动处理。

关于diff算法的详细理解,可以持续关注更新。

以上就是React Virtual DOM前端框架全面分析的详细内容,更多关于React Virtual DOM前端框架的资料请关注脚本之家其它相关文章!

相关文章

  • react实现移动端二级路由嵌套详解

    react实现移动端二级路由嵌套详解

    这篇文章主要介绍了react移动端二级路由嵌套的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • React 性能优化方法总结

    React 性能优化方法总结

    这篇文章主要介绍了React性能优化方法总结,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • React虚拟列表的实现

    React虚拟列表的实现

    在开发过程中,总是遇到很多列表的显示。当上数量级别的列表渲染于浏览器,终会导致浏览器的性能下降,你可以选择其他方式避免,本文就介绍了虚拟列表来解决这个问题
    2021-05-05
  • React+Electron快速创建并打包成桌面应用的实例代码

    React+Electron快速创建并打包成桌面应用的实例代码

    这篇文章主要介绍了React+Electron快速创建并打包成桌面应用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • react-router-dom的使用说明

    react-router-dom的使用说明

    这篇文章主要介绍了react-router-dom的使用说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 详解React Native 屏幕适配(炒鸡简单的方法)

    详解React Native 屏幕适配(炒鸡简单的方法)

    React Native 可以开发 ios 和 android 的 app,在开发过程中,势必会遇上屏幕适配,这篇文章主要介绍了详解React Native 屏幕适配(炒鸡简单的方法),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • React组件渲染后对DOM的操作方式

    React组件渲染后对DOM的操作方式

    这篇文章主要介绍了React组件渲染后对DOM的操作方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • react+typescript中使用echarts的实现步骤

    react+typescript中使用echarts的实现步骤

    本文主要介绍了react+typescript中使用echarts的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • react如何获取URL中参数

    react如何获取URL中参数

    这篇文章主要介绍了react如何获取URL中参数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • React中的Component组件详解

    React中的Component组件详解

    本章节,我们将一起探讨 React 中类组件和函数组件的定义,不同组件的通信方式,以及常规组件的强化方式,帮助你全方位认识 React 组件,从而对 React 的底层逻辑有进一步的理解,感兴趣的朋友跟随小编一起看看吧
    2023-06-06

最新评论