看透react源码之感受react的进化

2023-11-11

写在前面

网上有许多关于react源码解读的文章,其中有很多都只是单纯贴源码,罗列变量名。其实大家都知道这个英文怎么读,直译也大概知道意思,但是这个英文在react中起到什么作用,并没有说的很通俗明白。

对于刚刚接触源码或者想要了解react实现的人来说,没有起到引导作用,一堆函数变量反而劝退了很多人。

所以打算开启一个系列的文章,用简单的代码片段代替源码,拆解react的时间分片、优先级调度、diff等核心模块,让大家一眼就能明白其中的原理。

react15为什么需要进化

react15有两大原罪,渲染阻塞和无法合并异步函数里面的setState

原罪1:同步渲染阻塞主线程

react15从setState到DOM节点渲染到页面上,整个流程都是同步的,所以如果其中某个环节占用时间特别长,就会造成主线程阻塞。

由于JS的执行是单线程的,JS线程与浏览器的其他线程互斥,如果JS线程阻塞,浏览器的渲染线程、事件线程也会相应的挂起。此时用户触发的浏览器原生事件也会无响应,造成卡顿的现象。

疑问:react15什么情况下会造成阻塞?

react15采用的是树形结构的虚拟DOM树,使用了递归方式的进行节点遍历,递归意味着虚拟DOM树的构建是一个同步的过程,只要一开始就无法中断。而且DOM节点层级越深,节点数越多,diff流程霸占JS线程的时间就越长。

当然网上都是这么说,实际上是不是真的是树形结构,是不是真的用递归的方式进行节点遍历,还是需要经过实际源码考证,为此我翻看了react@15.5.3的源码

求证1:树形结构

<div key={
   '最外层节点'}>
  {
   
    ['a', 'b', 'c', 'd'].map( (v,index) =>
      <div key={
   `第一层子节点 - ${
     v}`}>
        <span key={
   `${
     v}的子节点`}>parentNode:{
   v}<
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

看透react源码之感受react的进化 的相关文章

随机推荐

  • 信息熵到底是什么

    信息是我们一直在谈论的东西 但信息这个概念本身依然比较抽象 在百度百科中的定义 信息 泛指人类社会传播的一切内容 指音讯 消息 通信系统传输和处理的对象 但信息可不可以被量化 怎样量化 答案当然是有的 那就是 信息熵 早在1948年 香农
  • ubantu环境下IDA pro运行时碰到某些so找不到的问题

    最近帮组员解决IDA的问题 做个记录 问题 执行启动idea时出现报错 IDA Pro idaq64 报错如下 idaq64 error while loading shared libraries libgthread 2 0 so 0
  • 基于opencv中HOG+SVM的车轮识别及predict()函数的改进

    前言 opencv中HOG SVM已经是一个相对成熟的环境 只是在满足兼容性的条件下会牺牲很大的时间开销 在训练部分未做改进 只是对detectMultiScale 中的predict进行改进 其中HOG特征计算请参考 http blog
  • Oracle恢复删除的数据

    不下心删除了生产库的数据或者不小心删除了一部分数据 如何恢复找回 Oracle恢复删除数据的方法 方案一 利用oracle提供的闪回方法进行数据恢复 适用于delete删除方式 首先获取删除数据的时间点 select from v sql
  • C++_模板函数

    参考以下大佬博客 参考1 参考2 参考3 参考4 参考5 我们为什么需要模板 同样的函数 我们要为不同的参数类型写不同的版本 程序的逻辑是一模一样的 只是他们的类型是不一样的 如下 void Swap int x int y int tmp
  • ARM嵌入式体系架构(理论篇)

    基础知识 1 电路中的逻辑状态 0代表的是低电平 1代表高电平 2 半导体元开关 1 二极管 单向导通性 普通二极管 发光二极管 光敏二极管 稳压二极管 2 三极管 开关特性 C 集电集 B 基集 E 发射集 PNP型 电流方向从E极流向C
  • keil报错:No Target connected+Error: Flash Download failed - Target DLL has been cancelled四种可能

    一 供电 板子一定要供电 二 ST LINK是否接触不良 确保ST LINK跟板子连接完好 三 按住reset点击download 硬件和接线都没问题情况下 这时候可能是SWD的引脚被占用了 或者被禁用了 这时候ST LINK自然无法通过S
  • MySQL01

    课程回顾 数据库相关sql 查询所有 show databases 创建 create database db1 charset utf8 gbk 查看数据库信息 show create database db1 删除数据库 drop da
  • 使用Navicat插入数据时报错1062 - Duplicate entry ‘menu544073941‘ for key ‘PRIMARY‘

    gt 报错 1062 Duplicate entry menu544073941 for key PRIMARY gt 原因 数据库表在设计时 没有设置id主键自增 而要插入的这条数据id在表中已经存在 存在冲突 gt 解决 lt 2种 g
  • 常见的测试用例设计方法7---因果图法

    目录 一 因果图法的定义 二 因果图法的意义 三 因果图法的适用场合 四 因果图法的表示 五 因果图法的四种关系 六 因果图的基本约束 七 因果图的分析步骤及案例 一 因果图法的定义 因果图法是一种利用图解法分析输入的各种组合情况 从而设计
  • Understand Spring Security Architecture and implement Spring Boot Security

    In this tutorial we will be looking at how Spring Security works and its architecture We will be creating a Spring Boot
  • 谷歌浏览器设置黑暗模式

    方法一 在chrome的实验性功能中开启黑暗模式 1 打开Google Chrome 在地址栏中输入 chrome flags 回车 进入实验性功能页面 2 在搜索框中搜索 Auto Dark Mode for Web Contents 3
  • linux audit原理,Wauzh原理简析及audit规则风险评估

    HIDS基本原理 熟悉HIDS的朋友应该了解 服务器的shell监控一般有两种 一种依靠Linux的audit审计功能 比如Wazuh 一种是重编译和替换bash二进制文件 将shell上执行的命令实时通过socket传递到服务端 前一种方
  • Python设备和C语言设备通信(使用openmv、单片机、树莓派、K210等等设备的通信)

    文章目录 前言 数据类型和编码格式 发送单个字符 发送单个整形 发送字符 数字 总结 避坑 前言 通信无疑是做项目最常用到的一部分内容 如Openmv K210 树莓派等经常需要将其检测到的目标物体的坐标发送给单片机去处理 本文将记录几种最
  • c语言初学者if语句例子,if语句(初学者)

    用if语句可以构成分支结构 它根据给定的条件进行判断 以决定执行某个分支程序段 C语言的if语句有三种基本形式 1 基本形式 if 表达式 语句 其语义是 如果表达式的值为真 则执行其后的语句 否则不执行该语句 其过程为 例 include
  • svn 添加用户名密码

    http blog csdn net xiangshuai198807
  • TortoiseGit的使用

    目录 1 Concept 2 用Git Submodule方式将SDK链接到FW TLC仓库中 2 1 日常开发使用说明 2 2 将SDK提升为项目 RD无需关注 3 gitlab远程子仓库配置为SSH 3 1 Flow 3 2 Q A 4
  • windows操作系统基础知识 API+DLL

    windows操作系统 1 Win API简介 API Application Programming Interface 应用程序接口 API函数构筑了整个windows框架的基石 下面是操作系统的操作系统的核心 而它上面则是window
  • FlutterUI(二)Canvas 与 Paint

    Flutter自定义控件分为三大类 组合控件 通过组合其他widget成为一个新的widget 自绘控件 通过使用canvas与paint来完全绘制 继承widget 使用RenderObject来绘制 但最终还是使用canvas来绘制 本
  • 看透react源码之感受react的进化

    写在前面 网上有许多关于react源码解读的文章 其中有很多都只是单纯贴源码 罗列变量名 其实大家都知道这个英文怎么读 直译也大概知道意思 但是这个英文在react中起到什么作用 并没有说的很通俗明白 对于刚刚接触源码或者想要了解react