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的程序员创建,是一个非常强大的 ...
随机推荐
- 6月25日 Django 分页 cookie、session
cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...
- json.dumps参数之解
宝藏参数,懂的都懂^-^ 说明:编译后print()打印内容,此内容以字符串紧凑输出,且无顺序,中文不可读.. 应用:使用pycharm做接口测试时,print()打印出的接口下行,如下图: ...
- python中字符串与列表之间的相互转换
1.字符串>列表:split() a = 'my first python' b = a.split(" ") print(b)输出: 2.列表>字符串:join() ...
- 后门及持久化访问4----Com组件劫持
代码及原理介绍 COM是Component Object Model(组件对象模型)的缩写,COM组件由DLL和EXE形式发布的可执行代码所组成.每个COM组件都有一个CLSID,这个CLSID是注册 ...
- JavaScript day03 循环
循环 while循环 循环是重复性做一件事情 没有办法控制每次循环的时间长度 循环会增大程序时间复杂度(不建议无限循环嵌套 一般情况下不会嵌套超过两次) 死循环 是不会停止的循环 会导致电脑内存溢出 ...
- Struts2里面有什么隐式对象?
Struts 2.1 的隐式对象 (这些隐式对象都是Map类型) parameters 用于访问请求参数 request 用于访问HttpServletRequest的属性 session 用于访问H ...
- String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有?
没有.因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象.在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行 ...
- 如何使用双重检查锁定在 Java 中创建线程安全的单例?
这个 Java 问题也常被问: 什么是线程安全的单例,你怎么创建它.好吧,在Java 5之前的版本, 使用双重检查锁定创建单例 Singleton 时,如果多个线程试图同时创建 Singleton 实 ...
- 在 Spring 框架中如何更有效地使用 JDBC?
使用 SpringJDBC 框架,资源管理和错误处理的代价都会被减轻.所以开发者只 需写 statements 和 queries 从数据存取数据,JDBC 也可以在 Spring 框架提供 的模板类 ...
- Volcano:在离线作业混部管理平台,实现智能资源管理和作业调度
摘要:本文结合华为CCE团队在混合部署方面的研究和实战,介绍了混合部署的背景.概念.混部技术的设计方案和实际落地情况,以及对未来的计划和展望. 现代互联网数据中心的规模随着应用服务需求的快速增长而不断 ...