react中虚拟dom,diff,fiber - 初级了解

借鉴:

「React深入」一文吃透虚拟DOM和diff算法 - 掘金 (juejin.cn)

虚拟dom、fiber、渲染dom、dom-diff - 掘金 (juejin.cn)

未阅读源码,了解层面,后续可以深入了解

1.虚拟DOM

①.结构上:虚拟DOM比真实DOM轻很多

②.操作上:虚拟DOM比真实DOM性能高

③.流程上:一个页面如果有500次变化,没有虚拟DOM的就会渲染500次,而虚拟DOM只需要渲染一次,从这点上来看,页面越复杂,虚拟DOM的优势越大

2.虚拟DOM

2.1概念:一个对象

2.2.React中为组件大写原因:如果标签的首字母是小写,就会被认定为原生标签,反之就是React组件

2.3虚拟DOM优势:

①效率高,不用关注原生DOM,更关注业务层

②性能提升:浏览器在处理DOM的时候会很慢,处理JavaScript会很快。虚拟DOM减少真实DOM操作,提升性能。

③虚拟DOM不一定提升性能。虚拟DOM优势在于diff算法和批量处理策略。首次加载,比起原生DOM,虚拟DOM多了一层计算,消耗了性能 ,会比html慢

④兼容性和跨平台性

3.构建虚拟DOM

3.1 React.createElement 

3.1.1 react自身可以防止xss攻击(跨站脚本攻击)

3.2 转换为真是DOM:虚拟DOM转化为真实DOM的这个过程实际上非常复杂,大体上可以分为四步: 处理参数批量处理生成html渲染html

4.diff算法

4.1 与传统diff算法相比复杂度从O(n^ 3) 转化为O(n) 

4.2 diff策略

React通过三大策略完成了优化:

  1. Web UI 中 DOM 节点跨层级的移动操作特别少,可以忽略不计。
  2. 拥有相同类的两个组件将会生成相似的树形结构,拥有不同类的两个组件将会生成不同的树形结构。
  3. 对于同一层级的一组子节点,它们可以通过唯一 id 进行区分。

分别对应:tree diffcomponent diffelement diff

三 react fiber 是react16新增的更新机制,让react 更新过程可控,提升性能

在react v16之前更新组件只有两层,分别是:

  • Reconciler(调和器)—— 负责找出变化的组件;
  • Renderer(渲染器)—— 负责将变化的组件渲染到页面上; 缺点就是采用递归的方式去调和虚拟Dom且这个调和的过程不能被打断。如果是一个很大的项目,很容易卡住页面。 react v16+新增加了一层调度器。分别是:
  • scheduler(调度器)—— 负责调度任务的优先级,优先级高的任务有限执行。暂停其他任务。
  • Reconciler(协调器)—— 负责找出变化的组件:更新工作从递归变成了可以中断的循环过程。Reconciler内部采用了Fiber的架构
  • Renderer(渲染器)—— 负责将变化的组件渲染到页面上;

1.每个元素都有fiber对象对应,形成fiber树

2.react fiber的更新过程是碎片化的,一次更新会分成n个任务片。每个片执行完成后就将控制权给到调度器。

3.调度器查看有没有更高级任务(比如 alert,onclick等),如果有就执行更高级任务,没有久久继续执行fiber更新。该功能基于requestldeleCallback实现

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/211388.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS逆向之wasm逆向(二)

本文仅供技术交流和技术学习 不做其他用途 接着上一篇继续讲: 上篇地址: JS逆向之wasm逆向(二进制) 网址: aHR0cHM6Ly93d3cuN3E2Y3lqLmNvbTo5MDAxL3JlZ2lzdGVyNDY5Njg/aV9jb2RlPTQ0Mjc5OTU1 这个网站我们后面可以继续讲他的debugger 和滑块…

玻色量子“揭秘”之多项式回归问题与QUBO建模

摘要:多项式回归(Polynomial Regression)是一种回归分析方法,通过拟合一个多项式方程来模拟自变量与因变量之间的非线性关系。多项式回归的目标是找到一组多项式系数,使得拟合曲线尽可能地接近数据点。这种方法可以用于…

本地websocket服务端暴露至公网访问【cpolar内网穿透】

本地websocket服务端暴露至公网访问【cpolar内网穿透】 文章目录 本地websocket服务端暴露至公网访问【cpolar内网穿透】1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功…

centos7上用docker部署redis

1. 下载redis镜像 docker pull redis docker images # 查看镜像是否下载成功2. 安装redis容器 2.1 先准备好配置文件redis.conf vi /data/redis/redis.conf写入配置信息,appendonly yes,如果需要给redis配置密码,可以写入requirepass root…

Feign 远程调用

目录 代码架构 feign-api 模块解析 架构 依赖 定义接口类 lead-news-article模块 架构 yml配置 依赖 实现类 启动类 lead-news-wemedia模块 架构 调用 启动类 代码架构 feign-api 模块解析 架构 依赖 <dependency><groupId>org.springframework.clo…

为何越来越多的程序员纷纷转行网络安全?

目前&#xff0c;我国IT行业的人才结构不断升级&#xff0c;公司对程序员的要求越来越高&#xff0c;出现了大量的裁员现象&#xff0c;导致很多的程序员纷纷想转行的想法。 可能对于早期的程序员而言&#xff0c;学好编程语言就能找到比较好的工作。而现在伴随着互联网的不断发…

【深度学习实验】图像处理(一):Python Imaging Library(PIL)库:图像读取、写入、复制、粘贴、几何变换、图像增强、图像滤波

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 安装 PIL 库1. 图像读取和写入a. 图像读取b. 图像写入c. 构建新图像 2. 图像复制粘贴a. 图像复制b. 图像局部复制c. 图像粘贴 3. 几何变换a. 图像调整大小b. 图像旋转c. 图像翻转 4. 图像增强a.…

5个免费在线工具推荐

NSDT 三维场景建模工具GLTF/GLB在线编辑器Three.js AI自动纹理化开发包YOLO 虚幻合成数据生成器3D模型在线转换 1、NSDT 三维场景建模 访问地址&#xff1a;NSDT 编辑器 2、GLTF/GLB在线编辑器 访问地址&#xff1a;GLTF 编辑器 3、Three.js AI自动纹理化开发包 图一为原始模…

【史上最细教程】一台服务器上搭建2个MySQL实例

史上最细教程-一台服务器上搭建2个MySQL实例 文章目录 史上最细教程-一台服务器上搭建2个MySQL实例环境准备&#xff1a;操作步骤&#xff1a;1.安装MySQL2.配置搭建3306、3307实例3.初始化3306、3307实例、远程连接访问支持 推荐文章&#xff1a; 环境准备&#xff1a; 服务器…

给做steam游戏搬砖项目新手小白的5个警示

CSGO搬砖日常出货更新 今天&#xff0c;阿阳要向你们揭秘一个备受瞩目的项目——Steam搬砖项目。或许你们已经听闻过它的名字&#xff0c;但今天我要带领你们深入了解这个项目的本质&#xff0c;为你们揭示五个必须警惕的警示。让我们共同探索这个项目是否适合你们&#xff0c;…

关于「光学神经网络」的一切:理论、应用与发展

/目录/ 一、线性运算的光学实现 1.1. 光学矩阵乘法器 1.2. 光的衍射实现线性运行 1.3. 基于Rayleigh-Sommerfeld方程的实现方法 1.4. 基于傅立叶变换的实现 1.5. 通过光干涉实现线性操作 1.6. 光的散射实现线性运行 1.7. 波分复用&#xff08;WDM&#xff09;实现线性运…

OpenAI再次与Sam Altman谈判;ChatGPT Voice正式上线

11月22日&#xff0c;金融时报消息&#xff0c;OpenAI迫于超过700名员工联名信的压力&#xff0c;再次启动了与Sam Altman的谈判&#xff0c;希望他回归董事会。 在Sam确定加入微软后&#xff0c;OpenAI超700名员工签署了一封联名信&#xff0c;要求Sam和Greg Brockman&#x…