以下是学习重点 原文地址

浏览器环境
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 日常记录的更多相关文章

  1. React学习记录

    托webpack的福,我终于可以开始写React了.==ORZ 我感觉我接近webpack工程师更进一步了哈哈哈. 以下所有内容均来自小红书,仅是我的个人记录,如想系统学习,请移步:React小书 : ...

  2. React学习记录一

    半路出家直接上手React,其实有点吃力,所以开始研究create-react-app,从这里下手吧. create-react-app 官方网站:https://github.com/faceboo ...

  3. React日常填坑手册(持续更新)

    1.react中自己定义的组件第一个字母一定要大写,如<app />会不显示,<App />才能正常显示. 2.在react中点击事件里面setState时会使this重新定义 ...

  4. Unity日常记录-本地保存未来时间实现倒计时

    本地保存未来时间实现倒计时 TimeTool工具类:获取当前时间.未来时间.两时间差 using System; using UnityEngine; public class TimeTool { ...

  5. react+spring 记录跨域问题的解决方法

    react 跨域访问后台,默认是有跨域问题,并且火弧和谷歌浏览器,对跨域问题展示还不一样. 谷歌浏览器如下图: 此处状态是200,然而在Response却没有任何信息,如下图 然而火弧浏览器,对该问题 ...

  6. React 实践记录 04 Flux demo

    Introduction flux应用架构如下图所示,本文并不是讲述怎么立即做一个酷炫的应用,而是讲述如何依照这种框架,来进行代码的组织. 我们先把这个流程转述为文字:抛开与webAPI的交互不谈,以 ...

  7. React 实践记录 03 React router

    Introduction 本文主要参考了react router 的官方文档. React Router是一套完整的配合React的路由解决方案,可能你已经知道前端路由,或者知道后端有路由的概念,如下 ...

  8. React 实践记录 02 Flux introduction

    Introduction 本文组成: React 官方文档翻译 相关实践心得. 内容上是Flux的介绍,例子将会在以后写出. 一旦稍微多了解一点React,很难避免听到Flux这个名词. Flux是一 ...

  9. React 实践记录 01 组件开发入门

    Introduction 本文组成: Ryan Clark文章Getting started with React的翻译. 博主的实践心得. React由Facebook的程序员创建,是一个非常强大的 ...

随机推荐

  1. 6月25日 Django 分页 cookie、session

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  2. json.dumps参数之解

    宝藏参数,懂的都懂^-^ 说明:编译后print()打印内容,此内容以字符串紧凑输出,且无顺序,中文不可读..   应用:使用pycharm做接口测试时,print()打印出的接口下行,如下图:   ...

  3. python中字符串与列表之间的相互转换

    1.字符串>列表:split() a = 'my first python' b = a.split(" ") print(b)输出: 2.列表>字符串:join() ...

  4. 后门及持久化访问4----Com组件劫持

    代码及原理介绍 COM是Component Object Model(组件对象模型)的缩写,COM组件由DLL和EXE形式发布的可执行代码所组成.每个COM组件都有一个CLSID,这个CLSID是注册 ...

  5. JavaScript day03 循环

    循环 while循环 循环是重复性做一件事情 没有办法控制每次循环的时间长度 循环会增大程序时间复杂度(不建议无限循环嵌套 一般情况下不会嵌套超过两次) 死循环 是不会停止的循环 会导致电脑内存溢出 ...

  6. Struts2里面有什么隐式对象?

    Struts 2.1 的隐式对象 (这些隐式对象都是Map类型) parameters 用于访问请求参数 request 用于访问HttpServletRequest的属性 session 用于访问H ...

  7. String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有?

    没有.因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象.在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行 ...

  8. 如何使用双重检查锁定在 Java 中创建线程安全的单例?

    这个 Java 问题也常被问: 什么是线程安全的单例,你怎么创建它.好吧,在Java 5之前的版本, 使用双重检查锁定创建单例 Singleton 时,如果多个线程试图同时创建 Singleton 实 ...

  9. 在 Spring 框架中如何更有效地使用 JDBC?

    使用 SpringJDBC 框架,资源管理和错误处理的代价都会被减轻.所以开发者只 需写 statements 和 queries 从数据存取数据,JDBC 也可以在 Spring 框架提供 的模板类 ...

  10. Volcano:在离线作业混部管理平台,实现智能资源管理和作业调度

    摘要:本文结合华为CCE团队在混合部署方面的研究和实战,介绍了混合部署的背景.概念.混部技术的设计方案和实际落地情况,以及对未来的计划和展望. 现代互联网数据中心的规模随着应用服务需求的快速增长而不断 ...