React 日常记录
以下是学习重点 原文地址
浏览器环境
JS解析和执行、绘制、事件处理、静态资源加载和处理
GUI渲染线程和Javascript线程
调度策略
先到先得(FCFS)
对短进程不利
对I/O密集不利
单处理器进程调度中并不受欢迎
轮转 (时钟的 )
确定合适的时间片长度
对I/O进程还是不公平
最短进程优先(SPN)
先执行完短进程,后执行长进程。这是一种非抢占策略。
缺陷是: 如果系统有大量的短进程,那么长进程可能会饥饿得不到响应
最高响应比优先(HRRN)
为了解决长进程饥饿问题,同时提高进程的响应速率
响应比 = (等待执行时间 + 进程执行时间) / 进程执行时间
对于短进程来说,因为执行时间很短,分母很小,所以响应比比较高,会被优先执行
对于长进程来说,执行时间长,一开始响应比小,但是随着等待时间增长,它的优先级会越来越高,最终可以被执行
反馈法
每个进程一开始都有相同的优先级,每次被抢占(需要配合其他抢占策略使用,如轮转),优先级就会降低一级。因此通常它会根据优先级划分多个队列。
解决这种问题有三个方向:
1️⃣ 优化每个任务,让它有多快就多快。挤压CPU运算量
2️⃣ 快速响应用户,让用户觉得够快,不能阻塞用户的交互
3️⃣ 尝试 Worker 多线程
Fiber 架构
Reconcilation(协调)
React Fiber 的思想和协程的概念是契合的: React 渲染的过程可以被中断,可以将控制权交回浏览器,让位给高优先级的任务,浏览器空闲后再恢复渲染。
主动让出机制(通过requestIdleCallback实现)
模拟函数调用栈
递归进行处理的事情分解成增量的执行单元,将递归转换成迭代.
链表-> Fiber
return 父节点
child 子节点
sibling 下一兄弟节点
⚛️ 协调阶段:可以被中断副作用(Effect)
constructor
shouldComponentUpdate
render
getSnapshotBeforeUpdate
⚛️ 提交阶段: 同步执行,不能被打断.副作用(Effects)一次性执行
componentDidMount
componentDidUpdate
componentWillUnmount
协调阶段可能被中断、恢复,甚至重做,️React 协调阶段的生命周期钩子可能会被调用多次!,
协调阶段的生命周期钩子不要包含副作用
不会再递归去比对、而且不会马上提交变更。
结构信息
节点类型信息如div、MyComp
节点的状态 - 节点的组件实例、props、state等
副作用保存在节点的effectTag 通过nextEffect连接起来
替身构建一颗新的树(官方称为workInProgress tree,WIP树)还有一颗表示已渲染界面的旧树
WIP 树双缓存(Double Buffering)
中断和恢复
React 日常记录的更多相关文章
- React学习记录
托webpack的福,我终于可以开始写React了.==ORZ 我感觉我接近webpack工程师更进一步了哈哈哈. 以下所有内容均来自小红书,仅是我的个人记录,如想系统学习,请移步:React小书 : ...
- React学习记录一
半路出家直接上手React,其实有点吃力,所以开始研究create-react-app,从这里下手吧. create-react-app 官方网站:https://github.com/faceboo ...
- React日常填坑手册(持续更新)
1.react中自己定义的组件第一个字母一定要大写,如<app />会不显示,<App />才能正常显示. 2.在react中点击事件里面setState时会使this重新定义 ...
- Unity日常记录-本地保存未来时间实现倒计时
本地保存未来时间实现倒计时 TimeTool工具类:获取当前时间.未来时间.两时间差 using System; using UnityEngine; public class TimeTool { ...
- react+spring 记录跨域问题的解决方法
react 跨域访问后台,默认是有跨域问题,并且火弧和谷歌浏览器,对跨域问题展示还不一样. 谷歌浏览器如下图: 此处状态是200,然而在Response却没有任何信息,如下图 然而火弧浏览器,对该问题 ...
- React 实践记录 04 Flux demo
Introduction flux应用架构如下图所示,本文并不是讲述怎么立即做一个酷炫的应用,而是讲述如何依照这种框架,来进行代码的组织. 我们先把这个流程转述为文字:抛开与webAPI的交互不谈,以 ...
- React 实践记录 03 React router
Introduction 本文主要参考了react router 的官方文档. React Router是一套完整的配合React的路由解决方案,可能你已经知道前端路由,或者知道后端有路由的概念,如下 ...
- React 实践记录 02 Flux introduction
Introduction 本文组成: React 官方文档翻译 相关实践心得. 内容上是Flux的介绍,例子将会在以后写出. 一旦稍微多了解一点React,很难避免听到Flux这个名词. Flux是一 ...
- React 实践记录 01 组件开发入门
Introduction 本文组成: Ryan Clark文章Getting started with React的翻译. 博主的实践心得. React由Facebook的程序员创建,是一个非常强大的 ...
随机推荐
- OOS 预览报错解决思路
预览报错解决思路: 官方链接:https://docs.microsoft.com/zh-cn/officeonlineserver/office-online-server :> 查看服务器内 ...
- ArcgisServer在Linux系统上更新许可
以下是引用Arcgis知乎的: [解决办法]:步骤1,删除旧许可.具体方法如下:切换至 arcgis server 账户,导航至[ArcGIS for Server 安装目录]/framework/r ...
- 论文翻译:2021_论文翻译:2018_F-T-LSTM based Complex Network for Joint Acoustic Echo Cancellation and Speech Enhancement
论文地址:https://arxiv.53yu.com/abs/2106.07577 基于 F-T-LSTM 复杂网络的联合声学回声消除和语音增强 摘要 随着对音频通信和在线会议的需求日益增加,在包括 ...
- Redis 系统学习目录
Redis 系统学习目录 1.redis是什么2.redis的作者何许人也3.谁在使用redis4.学会安装redis5.学会启动redis6.使用redis客户端7.redis数据结构 – 简介8. ...
- T12焊台控制器制作教程 | T12烙铁 | PID增量式算法恒温控制 | 运算放大器-热电偶电压采集 | OLED屏幕显示-SPI通信 | 旋转编码器EC11用户操作
前言 购买T12烙铁的相关配件已经1年多了,期间也尝试了一些开源的T12控制器,但都没有成功,要么是配套资料少,要么是英文的,其中51和arduino的居多,STM32的较少.求人不如求己,索性自己开 ...
- 利用多个sem信号量在线程通讯
直接上代码,主要用到sem_trywait & sem_post #include<stdio.h> #include<pthread.h> #include<s ...
- 如何使用 Spring Boot 实现分页和排序?
使用 Spring Boot 实现分页非常简单.使用 Spring Data-JPA 可以实现将可分页的传递给存储库方法.
- 解释JDBC抽象和DAO模块?
通过使用JDBC抽象和DAO模块,保证数据库代码的简洁,并能避免数据库资源错误关闭导致的问题,它在各种不同的数据库的错误信息之上,提供了一个统一的异常访问层.它还利用Spring的AOP 模块给Spr ...
- python模块相互依赖的解决方案
第一种:将相互依赖的文件中的其中一个文件的代码移植到另一个文件中... 第二种:将 import .... 或 from ... import 语句的位置移动到def函数内部,由于import和fro ...
- 什么是 spring 的内部 bean?
只有将 bean 用作另一个 bean 的属性时,才能将 bean 声明为内部 bean. 为了定义 bean,Spring 的基于 XML 的配置元数据在 <property> 或 &l ...