写点什么

深入了解 React 新引擎:React Fiber

  • 2017-05-09
  • 本文字数:1080 字

    阅读完需:约 4 分钟

Facebook 正在以流行的 JavaScript 框架 React 为基础开发一个全新的架构。这个名为 React Fiber 的全新设计改变了检测变更的方法和时机,借此可改进浏览器端和其他渲染设备的响应速度。

这一全新架构最初已于2016 年7 月公开发布,其中蕴含着过去多年来Facebook 不断改进的工作成果。该架构可向后兼容,彻底重写了React 的协调(Reconciliation)算法。该过程可用于确定出现变更的具体时间,并将变更传递给渲染器。

实际上该团队在单线程JavaScript 引擎的基础上构建了一种可划分优先级的协作式任务调度器。在最初的协调算法(现已更名为 Stack Reconciler )中,Virtual DOM diff 会一次性处理整个组件树:

重点在于,Stack Reconciler 始终会一次性地同步处理整个组件树。Stack Reconciler 无法暂停,因此如果更新较为深入并且可用 CPU 时间有限,这种做法并非最优化的。

与之相对的 Fiber Reconciler 则有着截然不同的目标:

  • 能够将可中断的任务拆分成块。
  • 能够对进程中的工作划分优先级、重新设定基址(Rebase)、恢复。
  • 能够在父子之间来回反复,借此为 React 的 Layout 提供支持。
  • 能够通过 render() 返回多个元素。
  • 为错误边界提供了更好的支持。

简单来说,此时不在需要等待变更传播到整个组件树,React Fiber 可以知道如何时不时暂停一下,检查是否有其他更重要的更新。这种调度能力主要基于 requestIdleCallback 的使用,而这是一种 W3C 候选推荐标准

在 React Conf 2017 大会上,Lin Clark 通过名为 React Fiber 简介的演讲循序渐进介绍了新协调器的独到之处。

大部分情况下,开发者无需担心代码的适配问题,但也有少量应用依赖以特定顺序进行的生命周期钩子(Lifecycle hook)。由于顺序已经无法保证,因此可能会遇到一些问题。

“为确保这一特性不会影响应用”,Clark 称:“Fiber 团队正在制定更为平缓的升级路径”。

Dan Abramov写到,React 团队认为大部分 React 应用不会因为第 16 版而遇到问题:

React 16(正在开发中)是一次革新,但也使用了相同的公开 API。对于 Facebook 所使用的超过 30,000 个(!)组件,其中只有少量需要改动,并且这少数组件主要被一些已经不再支持或没有正式记录在案的行为所使用。因此可以说完全可以保证 99.9% 的兼容性。这也让我们确信 React 16 基本上也可以直接适用于你的代码。

Fiber 将在 React 16 中首次登场,第 16 版不仅包含新的协调引擎,而且提供了可串联使用的全新渲染器(例如 ReactDOM、React Native)。同时 isfiberreadyyet.com 提供了测试套件的最新结果。截至撰写本文时,已顺利通过了 92.2% 的测试。

阅读英文原文 React Fiber: A Closer Look at the New Engine of React

2017-05-09 19:003336
用户头像

发布了 283 篇内容, 共 108.9 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

12. 《重学 JAVA》-- 面向对象

杨鹏Geek

Java 25 周年 28天写作 12月日更

43 K8S之节点/Pod亲和调度

穿过生命散发芬芳

k8s 28天写作 12月日更

Linux一学就会之RAID磁盘阵列的原理与搭建

学神来啦

Linux 运维 linux运维 raid linux云计算

百度开源一款基于 Git 的多仓库管理工具:MGit

百度开发者中心

git 开源

Dubbo 框架学习笔记二

风翱

dubbo 12月日更

十年所学,终成《代码随想录》!

博文视点Broadview

如何知道页面浏览时长?

神策技术社区

采集 iOS SDK 页面浏览

一个小插曲

Tiger

28天写作

AOP在JavaScript和TypeScript中的应用

RingCentral铃盛

【等保小知识】安全等保是什么意思?是ccrc吗?

行云管家

等保 等级保护 ccrc

如何避免移动研发的一些坑

Speedoooo

研发效能 ios开发 APP开发 APP软件开发 Andriod开发

MongoDB在 AWS Marketplace 中推出即用即付产品,有力提升客户体验

MongoDB中文社区

mongodb

利用漏洞修复漏洞:青藤提供的「Log4j命令注入漏洞(CVE-2021-44228)」【免重启】在线热补丁服务现已上线!

青藤云安全

网络安全 漏洞修复

如何在建木CI中使用Vault管理密钥

Jianmu

DevOps CI/CD 开源软件

如何使用会声会影标题工具制作弹幕效果

懒得勤快

JetBrains又出神器啦!Fleet,体验飞一般的感觉

程序那些事

Java ide JetBrains 程序那些事 12月日更

Go语言学习查缺补漏ing Day8

恒生LIGHT云社区

golang 编程语言 Go 语言

英特尔技术发力:着眼10倍封装密度提升,30%~50%晶体管密度提升,布局非硅基半导体

科技新消息

CSS之选择器(五)

Augus

CSS 12月日更

恒源云(GPUSHARE)_CV领域之几何变化

恒源云

深度学习 CV

TDengine入驻Rainbond开源应用商店

北京好雨科技有限公司

时序数据库 #Kubernetes# rainbond

架构实战营模块六作业

渐行渐远

架构实战营

【等保测评】山东省9家等保测评机构名单汇总

行云管家

等保 等级保护 等保测评 等保评测

使用WT工具恢复MongoDB数据

MongoDB中文社区

mongodb

如何高效完成HarmonyOS分布式应用测试?|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS ArKUI 3.0

使用HTML,CSS和Javascript构建响应式导航栏和面包屑菜单

海拥(haiyong.site)

响应式 大前端 28天写作 签约计划第二季 12月日更

How to construct a Playground Project

Changing Lin

12月日更

超写实“龚俊数字人”上线,百度智能云助力各行业打造定制数字人

百度开发者中心

人工智能

架构训练营 week2 学习总结

红莲疾风

「架构实战营」

[架构实战营] 模块六作业

张祥

架构实战营

node.js中利用IPC和共享内存机制实现计算密集型任务转移

RingCentral铃盛

深入了解React新引擎:React Fiber_JavaScript_David Iffland_InfoQ精选文章