当前位置:首页 > 科技  > 软件

React 18的并发渲染:颠覆传统的性能飞跃

来源: 责编: 时间:2024-04-24 17:34:43 276观看
导读React 18 引入的并发渲染(Concurrent Rendering)是一个革命性的特性,它改变了 React 应用的渲染方式,使得渲染过程更加高效且可控。并发渲染的核心原理在于将渲染任务拆分为多个可中断和可恢复的小任务,并根据优先级进行调

React 18 引入的并发渲染(Concurrent Rendering)是一个革命性的特性,它改变了 React 应用的渲染方式,使得渲染过程更加高效且可控。IL728资讯网——每日最新资讯28at.com

并发渲染的核心原理在于将渲染任务拆分为多个可中断和可恢复的小任务,并根据优先级进行调度。下面我们将通过代码示例详细解析 React 18 并发渲染的原理。IL728资讯网——每日最新资讯28at.com

IL728资讯网——每日最新资讯28at.com

1. Fiber 架构与任务调度

React 18 使用 Fiber 架构来管理渲染任务。Fiber 节点包含组件的类型、状态、props 等信息,并且允许 React 在渲染过程中暂停和恢复。IL728资讯网——每日最新资讯28at.com

Fiber 架构使用双端队列(work-in-progress tree 和 current tree)来管理渲染任务。当开始渲染时,React 会从根节点开始,遍历组件树并创建 Fiber 节点。IL728资讯网——每日最新资讯28at.com

这些 Fiber 节点会被放入 work-in-progress tree 中,表示正在进行中的渲染任务。同时,current tree 中保存着上一次渲染的结果,用于在渲染过程中进行比对和更新。IL728资讯网——每日最新资讯28at.com

下面是一个简单的示例,展示如何使用 startTransition 来区分紧急和非紧急的更新任务:IL728资讯网——每日最新资讯28at.com

import React, { useState, startTransition } from 'react';function App() {  const [text, setText] = useState('');  const [isPending, setIsPending] = useState(false);  const handleChange = (event) => {    // 标记为非紧急更新开始    setIsPending(true);    // 使用 startTransition 将更新放入待处理队列    startTransition(() => {      setText(event.target.value);      // 假设这里还有其他非紧急的更新操作    });    // 立即更新pending状态为false,表示非紧急更新已安排    setIsPending(false);  };  return (    <div>      <input value={text} onChange={handleChange} />      {isPending ? 'Updating...' : 'Ready'}    </div>  );}export default App;

在上面的代码中,当用户输入时,handleChange 函数会被调用。我们使用 setIsPending(true) 来标记一个非紧急更新的开始。然后,通过 startTransition,我们将实际的更新操作(设置输入框的值)放入待处理队列中。这个更新现在被标记为非紧急的,并将在浏览器空闲时执行。最后,我们立即将 isPending 状态更新为 false,以在界面上显示“Updating...”状态,告知用户更新正在进行中。IL728资讯网——每日最新资讯28at.com

2. 中断与恢复

并发渲染的另一个关键特性是中断与恢复的能力。在渲染过程中,如果浏览器资源紧张或有其他高优先级的任务需要执行,React 可以暂停当前的渲染任务,释放资源给更重要的任务。一旦资源变得可用,React 会恢复之前的渲染任务,并继续执行剩余的小任务。IL728资讯网——每日最新资讯28at.com

这种中断与恢复的能力使得 React 能够更好地适应浏览器的资源状况,避免长时间的阻塞和卡顿。它确保了即使在复杂的应用中,用户也能获得流畅且响应式的体验。IL728资讯网——每日最新资讯28at.com

3. 时间切片

时间切片允许 React 将长时间的渲染任务拆分成多个较短的时间片,以避免阻塞主线程。虽然 React 内部自动管理时间切片,但开发者可以通过控制更新任务的优先级来间接影响时间切片的分配。IL728资讯网——每日最新资讯28at.com

在上面的示例中,通过 startTransition,我们实际上是在告诉 React:“这个更新不是非常紧急,你可以在其他高优先级的任务完成后,或者浏览器空闲时再进行。”IL728资讯网——每日最新资讯28at.com

总结

React 18的并发渲染特性通过引入Fiber架构和startTransition等方法,实现了更加灵活和高效的渲染控制。它允许开发者将更新操作拆分为紧急和非紧急两类,并根据浏览器的资源状况进行动态调度。通过合理利用这些新特性,我们可以优化React应用的性能,提升用户体验,为项目带来更多的价值。IL728资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-85230-0.htmlReact 18的并发渲染:颠覆传统的性能飞跃

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C#数据去重的五种方式,你知道几种?

下一篇: Golang异步编程方式和技巧

标签:
  • 热门焦点
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。近期
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就&ldquo;胡锡进炒股是否知道认真报道&rdquo;展开讨论。有
  • 造车两年股价跌六成,小米的估值逻辑变了吗?

    如果从小米官宣造车后的首个交易日起持有小米集团的股票,那么截至2023年上半年最后一个交易日,投资者将浮亏59.16%,同区间的恒生科技指数跌幅为52.78%
  • 2299元起!iQOO Pad明晚首销:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其最大的卖点
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
  • “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主&ldquo;七王&rdquo;在群里介绍一些刷单赚
Top