当前位置: 首页 > Web前端 > vue.js

React团队最近在做什么?

时间:2023-04-01 12:21:03 vue.js

大家好,我是Kason。不知道大家有没有感觉:React新特性的更新速度很慢,时间通常以年来衡量。事实上,在React漫长的发展过程中,除了有很多优秀的特性(比如Hooks和Suspense),还有很多想法最终没有实现。这些想法通常不为开发人员所知,这导致人们误以为React的某些新功能进展缓慢。考虑到这一点,React官方博客今天发表了一篇文章,概述了团队目前的工作方向。这篇文章让我们了解了React接下来的工作重点,主要包括三个方面:与底层特性优化相关的相关文档被提及的频率越来越高。并发相关的变化对React的影响越来越大,甚至会影响到日常的开发(比如useEffect在严格模式下会在开发环境中执行两次)。作为开发者,我们希望享受并发带来的体验提升,却不愿意接受业务代码复杂度的增加。React团队明白这个道理,所以React的开发模式主要是:React团队开发底层特性+与其他开源团队合作开发上层特性。下面我们介绍两个开发中的底层特性。ReactServerComponents20年在官方博客中介绍了ReactServerComponents(以下简称RSC)。作为底层特性,不适合开发者直接使用。React团队与Vercel和Shopify合作。这些团队接入RSC,将其封装到业务框架(如Next.js)中,然后提供给开发者使用的框架。这不仅可以加强React与社区的联系(有像Vercel这样的专业公司作为中介),也可以让React团队专注于React本身的迭代(而不用分心开发外围库,比如React全家桶)。资源请求很多外部资源请求(比如脚本、外部样式、字体文件、图片等)都有预加载的需求。React团队正在React环境中开发通用的外部资源请求API。有了这个API请求的数据,可以使用Suspensefallback来显示请求过程中的加载效果,可以防止view弹出爆米花(popcorning)。爆米花这个词真的很形象。他描述的现象是加载前后数据占用的高度不同,导致页面大小发生剧烈变化。想象一下,页面上有很多图片要加载。随着图片的加载,页面会被图片拉伸,就像玉米膨胀成爆米花一样。Optimization-related优化相关的进展主要体现在三个方面:compile-time运行时分析工具compile-timeHuangXuan在ReactConf2021上介绍了ReactForget,这是一个自动将useMemo添加到带有useCallback的优化React代码的编译器。该项目一直在不断迭代,最近完成了重写。同时,编译器的playground也在同步开发中。React从未在运行时在Vue中实现KeepAlive功能。目前React中控制组件可见性的方式只有两种:mount/unmoutcomponents。缺点是:组件卸载后,组件中保存的状态丢失,组件对应DOM中保存的状态(如滚动高度)也丢失。使用CSS(比如display:none)来控制组件对应DOM的显示。虽然这可以保存状态,但它存在性能问题——React仍然会在运行时遍历隐藏组件(隐藏组件仍然会渲染)。OffscreenAPI的出现结合了两者的优点。按照开头提到的只关注底层特性的原则,开发者最好不要直接使用OffscreenAPI,而是使用集成了Offscreen的上层框架(比如路由库)。插一句题外话,其实OffscreenAPI并不是一个全新的API。在源代码里面,他是Suspense的组件之一。下一个迭代方向只是从源代码中公开它。分析工具分析组件性能一直是刚需。为此,React团队开发了浏览器分析工具:随着React18的到来,将新增一个时间线分析工具(timelineprofiler)来分析并发更新的调度。但是都没有很好的解决下面的需求:如何分析某个更新慢?如何分析一次交互(如点击、页面导航)的完整过程的表现?目前正在开发一个API,用于分析这些特定情况下的性能问题。文档React的新文档目前仍处于Beta版本,内容并不完整。但React团队对新文档的态度是绝对认真的,还有一个有趣的细节:在总结useEffect应用场景时,Dan发现一些常见的场景可以通过一个新的原生Hook来处理。于是,文档写了一半,Dan就跑去提出一个useEvent的提案。虽然目前的文档还没有完成,但是从发布的内容来看,无论你是React的新手还是老手,都能从新文档中有所收获。在21年的React圣诞特辑和走进React核心团队中总结,作者表达了一个观点:像Hooks这样一个完美的特性,它可以成为一个Release,背后还有很多特性甚至没有达到RFC阶段。所有功能都必须等到完全准备好。在那之前,它只能为其他功能让路。在一个如此重视交付并以不断加快的速度交付的行业中,如果您的承诺没有兑现,那将是非常令人沮丧的。但这并不意味着没有进步:您有时间思考和计划、试验和学习。即使暂时失败,也会给成功的特质带来启发。即使您没有完成年初预期的工作,也要相信挫折和中断是常态,而不是例外,无论好坏,即使在React团队中也是如此。仅仅因为您不产生新功能并不意味着您不提供价值。我想这也是React团队宣布下一步工作方向的原因之一。