写点什么

深入了解 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:003679
用户头像

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

关注

评论

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

照亮旷野的,是少年开发者眼中的炬火

脑极体

明源云天际PaaS平台,构建零代码、低代码在线协同开发实践

科技热闻

vue番茄钟&electron打包

空城机

Electron vue cli 5月月更

Python图像处理丨图像缩放、旋转、翻转与图像平移

华为云开发者联盟

Python 图像平移 图像缩放

一个关于SDWAN单臂部署方案验证的实验

天翼云开发者社区

网络

NVIDIA安培架构下MIG技术分析

天翼云开发者社区

直播预告 | PolarDB-X 动手实践系列——基于 Prometheus + Grafana 的 PolarDB-X 监控体系

阿里云数据库开源

数据库 阿里云 开源 PolarDB-X 教学

一个轻量的数据库数据告警器

山河已无恙

Java 数据监控

netty系列之:在netty中使用UDP协议请求DNS服务器

程序那些事

Java Netty 程序那些事 5月月更

第二章 启航

Geek_古藤模根

图数据库实战 gremlin 入门 Gremlin

Hoo联合SwapAll发布赏金活动 用户可体验“救援任务”瓜分赏金奖池

区块链前沿News

SAP Hoo

相较国外代码托管平台 gitlab,咱们中国自己的代码托管平台有哪些优势?

阿里云云效

云计算 阿里云 代码管理 代码托管 代码安全

PolarDB-X迎来开源后首个重大版本升级,2.1版本新增5大特色功能

阿里云数据库开源

数据库 阿里云 开源 国产数据库 PolarDB-X

图分析的22种算法与图形理解

清林情报分析师

数据分析 知识图谱 图算法 图论 知识结构

如何实现文档协作共享?

小炮

两届获奖选手 手把手教你如何征战华为软件精英挑战赛

科技热闻

Java开发规范(一)

DC.夜猫

开发 规范 开发规范 java

2022Gartner容器预测:2025年85%的企业将使用容器管理服务

York

容器 云原生 数字化转型

基于信息检索和深度学习结合的单元测试用例断言自动生成

华为云开发者联盟

深度学习 单元测试 信息检索

平行云CEO 李岩:CloudXR ,开启通往元宇宙的通道

阿里云弹性计算

XR 元宇宙

英特尔以“整合论”谋篇布局,加码数据中心

科技之家

【直播回顾】参与文档贡献,开启OpenHarmony社区贡献

OpenHarmony开发者

OpenHarmony

这道静态变量题,我居然考了0分

华为云开发者联盟

Java 静态变量 Java static

10分钟弄懂云原生网络功能,快来瞧瞧!

VoltDB

云原生 云原生网络 网络功能

实践GoF的设计模式:工厂方法模式

华为云开发者联盟

设计模式 工厂方法模式

你会用Apifox写断言吗?

Liam

测试 Postman 自动化测试 测试工具 测试自动化

LinkedHashMap 源码分析-访问最少删除策略

zarmnosaj

5月月更

阿里云云原生一体化数仓入选 2022数博会“十佳大数据案例”

阿里云大数据AI技术

数据挖掘 大数据 分布式计算 数据处理 MaxCompute

喜报|海泰方圆成功入选中国档案学会单位会员

电子信息发烧客

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