写点什么

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

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

关注

评论

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

PCSD考试说明及课程汇总

TiDB 社区干货传送门

社区活动 OLTP 场景实践 7.x 实践 学习&认证&课程

测试 k8s 安装

TiDB 社区干货传送门

管理与运维 7.x 实践

深入大模型的世界

我是谁

腾讯会议天籁实验室两项研究成果获深圳人工智能奖

极客天地

测试开发名企定向培训训练营即将开营,限时优惠进行中,手把手带你快速提升核心竞争力

测吧(北京)科技有限公司

测试

量化合约/合约量化系统开发运营版/成熟技术/源码案例

系统开发咨询1357O98O718

TiDB的数据自动均衡到底是怎么实现的?

TiDB 社区干货传送门

数据库架构设计 TiKV 底层架构

TiDB告警推送至企业微信机器人

TiDB 社区干货传送门

监控 集群管理

游戏发行困境及OgGame云游戏解决方案简述

Ogcloud

游戏 云游戏 云游戏发行 云游戏平台 游戏云化

tidb-operator 安装 TiDB 集群

TiDB 社区干货传送门

集群管理 管理与运维 安装 & 部署 数据库架构设计 7.x 实践

一次莽撞的 TiDB 升级故障复盘

TiDB 社区干货传送门

版本升级

世界知识产权日:XSKY 以更多架构核心专利,推进 SDS 产业创新创造

XSKY星辰天合

星辰天合 世界知识产权日

实战干货|Spark 在袋鼠云数栈的深度探索与实践

袋鼠云数栈

spark Spark 源码 spark SQL 离线开发 大数据计算引擎

如何制作个性又美观的二维码?自定义Logo、样式,还能一键复用

草料二维码

二维码 二维码生成 草料二维码 二维码美化

如何构建更稳定高效的TiDB多租户系统

TiDB 社区干货传送门

新版本/特性解读 数据库架构设计 应用适配 HTAP 场景实践 7.x 实践

Copilot的魔法让TiDB离线升级变得轻松愉快

TiDB 社区干货传送门

版本测评 8.x 实践

突破数据存储瓶颈!转转业财系统亿级数据存储优化实践

TiDB 社区干货传送门

马斯克的 xAI 融资 60 亿美元;英伟达收购两家 AI 创企丨 RTE 开发者日报 Vol.193

声网

ISO 专家解读 | 什么是 GQL 国际标准图查询语言

悦数图数据库

图数据库

预见预判|AIRIOT智慧交通管理解决方案

AIRIOT

智慧城市交通 智能交通 智慧交通系统

什么是IPD项目管理模式?聊聊IPD下的产品研发流程

IPD产品研发管理

产品 项目管理 IPD 产品研发

TiDB性能优化-操作系统

TiDB 社区干货传送门

性能调优

TiDB 在 CDC 同步下的主备切换

TiDB 社区干货传送门

集群管理 管理与运维 备份 & 恢复 6.x 实践 7.x 实践

测试开发名企定向训练营即将启动,限时优惠火热进行中!

霍格沃兹测试开发学社

Operator 安装 TiDB 监控告警

TiDB 社区干货传送门

管理与运维 安装 & 部署 数据库架构选型 7.x 实践

知识图谱算法有哪些

悦数图数据库

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