IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> React源码二 - React16版本架构 -> 正文阅读

[JavaScript知识库]React源码二 - React16版本架构

  • React 16版本架构可以分为三层:调度层、协调层、渲染层
    • Scheduler(调度层):调度任务的优先级,高优任务优先进入协调器
    • Reconciler(协调层):构建fiber数据结构,对比fiber对象找出差异,记录fiber对象要进行的DOM操作
    • Renderer(渲染层):负责将发生变化的部分渲染到页面上

    scheduler 调度层

    • 在React 15的版本中,采用了循环加递归的方式进行了virtualDom的比对,由于递归使用js自身执行栈,一旦使用就无法停止,直到任务执行完成。如果virtualDom树的层级比较深,virtualDom的比对就会长期占用js主线程,由于js又是单线程的无法同时执行其他任务,所以在比对过程中无法响应用操作,无法及时执行元素动画,造成了页面卡顿现象。
    • react16的版本中,放弃了js递归进行virtualdom的对比,而是采用循环模拟递归,且对比过程是利用浏览器的空闲时间完成的,不会长期占用主线程,这就解决了vitualDom对比造成页面卡顿的问题
    • 在window对象中提供了requestldleCallback API, 它可以利用浏览器的空闲时间执行任务,但是它触发频率不稳定,且也不是所有浏览器都兼容,所以react最终放弃了此API的使用
    • 在react中官方实现了自己的任务调度库,这个库叫做Scheduler。它也可以实现在浏览器空闲时执行任务,而且可以设置任务优先级,高优先级先执行,低优先级后执行
    • Scheduler存储在packages.scheduler文件夹中。

    Reconciler协调层

    • react 15的版本中,协调器和渲染器交替执行,即找到了差异就会直接更新差异,在react16版本中,这种情况发生了变化,协调器和渲染器不再交替执行。协调器负责找出差异,所有差异找出之后,统一交给渲染器进行DOM更新,也就是协调器的主要任务就是找出差异部分,并打上标记。

    Renderer渲染层

    • 渲染器根据协调器为Fiber节点打的标记,同步执行对应的DOM操作
    • 既然比对的过程从递归变成了可以中断的循环,那么react时如何解决中断更新时DOM渲染不完全的问题呢?
    • 其实根本不存在这个问题,因为在整个过程中,调度器和协调器的工作是在内存中完成的事可以被打断的,渲染器的工作被设定成为不可被打断,所以不存在dom渲染不完全的问题。
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-25 11:33:58  更:2022-05-25 11:34:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:00:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码