7月14日,ReactNative核心团队JoshuaGross在推特上表示,RN的新架构已经在Facebook内部实现,99%的代码已经开源。此次架构升级“计划已久”,Joshua表示,他们从2018年1月就开始计划了。2018年6月,Facebook公布了对RN进行大规模重构的计划和路线图。整个重构的目的就是让RN更加轻量,更加适应混合开发,接近甚至达到原生的体验。具体包括以下几个方面:改变线程模型。UI更新不再需要同时在三个不同的线程上触发,而是可以在任何线程上同步调用JavaScript以进行优先更新,同时将低优先级的工作推出主线程以保持对UI的响应能力。引入异步渲染能力,允许多次渲染,简化异步数据处理。简化JSBridge,使其更快、更轻。此次架构升级对ReactNative意义重大。按照官方的说法,这将大大提升RN的性能。RN自发布以来,大致经历了以下几个版本迭代(图片来自京东雄文源GMTCPPT),这次主要是为了解决饱受诟病的性能问题。为进一步了解RN的架构迭代细节,InfoQ记者采访了58同城资深前端工程师、58RN及Hybrid框架负责人姜宏伟。以下是具体内容。InfoQ:可以介绍一下你理解的这个架构升级吗?新的Fabric渲染引擎会不会大大提升RN的性能?姜宏伟:首先,Fabric不是渲染引擎,而是新架构中UI渲染部分的代号。ReactNative的新架构由三个关键部分组成:JSI、TurboModules和Fabric。JSI的全称是JavaScriptInterface,取代了原来的Bridge。通过从JS调用C++,从C++调用Java/OC,实现了JS与Java/OC的互操作。TurboModules是新架构API部分的代号。得益于JSI,JavaScript可以直接调用Native模块的方法。和浏览器中类似,JavaScript调用的是获取经纬度的方法,实际上调用的是C++的底层方法。Fabric是新架构中UI渲染部分的代号。得益于JSI,JavaScript可以直接操作Native组件并渲染UI。同样,在浏览器中,JS调用createElement创建一个div元素,通过底层C++渲染UI。根据现有的性能报告,新架构的性能大概有一个数量级的提升。这里的性能是指API和UI的运行性能,对首屏性能的影响有待进一步评估。InfoQ:所有新架构的代码都放到了GitHub上了吗?您的团队是否计划升级?姜宏伟:Facebook内部实现的新架构代码还没有完全放到GitHub上。目前JSI和TurboModules部分已经有了,Fabric部分还要再等一段时间。另外,在新架构的生态方面,比如导航、动画等等,估计会有很多变化。今年我们有升级的计划,非常期待早日使用新的RN架构。根据我们以往的升级经验,最需要关心的是新旧版本之间的兼容性。我们内部有9个应用程序,需要迁移300多个项目。我们不仅需要自动化的迁移工具,还需要业务开发和测试同学的配合,以及逐步扩展的方案。InfoQ:人们经常将RN与Flutter进行比较。在2019年的GMTC上,京东架构师熊文元表示,RN在启动性能上略优于Flutter,但在渲染上明显不如Flutter。这是RN整个框架的瓶颈。此次升级后,您如何评价这两个框架?蒋宏伟:这次升级之后,RN在性能上可以和Flutter匹敌了。首先,JavaScript和Dart语言都支持AOT预编译,这是一个平局。其次,JavaScript和Dart通过C++与底层进行交互,也是一个平局。最后,RN原生组件绘图有平台优化加成,可能比Flutter自绘引擎绘图更好。其他方面,萝卜青菜各有喜好。前端同学会更喜欢RN,客户端同学会更喜欢Flutter。InfoQ:你研究过Flutter吗?姜宏伟:其实我们内部很多APP都在用Flutter,我们也开源了FlutterFairUI&template动态框架,还有Magpie开发的工具流。但是,58同城、安居客等超级应用并没有使用Flutter。主要关注的是包大小和启动内存。InfoQ:在您看来,决定跨端框架发展的关键因素有哪些?未来跨端和原生解决方案之间会有什么样的动态平衡?姜宏伟:跨端框架发展的关键因素是净收入的规模。从框架开发者的角度来看,Facebook内部有1000+个RN页面,跨平台带来的净收益一定非常不错。Flutter我有点不确定,这取决于谷歌的Fuchsia操作系统是否成功。从框架用户的角度来看,那些不能生态友好的,比如Weex、NativeScript,开发成本太高,净收益可能为负,进而会制约框架的发展。有原生的地方就有跨端,两者永远并存,但跨端解决方案的市场份额会越来越大。原生解决方案更多是在一些创新和基础的场景下,比如短视频、VR或者跨终端的基础设施。跨终端的解决方案,比如Hybrid、小程序、RN、Flutter等,会更加成熟,应用在更多的场景中。并且因为可以节省开发成本,所以在现有场景中会用得更多。京东架构师熊文元曾在GMTC上详细分享过RN的新架构。想看他的Slides可以私信视频号,我单独发给你。来光影小改将在7月31日09:00进行直播预约视频号如果大家有关于本次架构升级的其他增量信息,欢迎在评论区给我留言。
