本文由 简悦SimpRead 转码,原文地址 [reactnative.dev] (reactnative.dev/blog/2021/0…)
React Native已经非常成功地提高了移动开发的标准,无论是在Facebook还是......。
React Native已经非常成功地提高了移动开发的标准,无论是在Facebook还是在行业的其他地方。随着我们以新的方式与电脑互动,随着新设备的发明,我们希望React Native能够为大家服务。虽然React Native最初是为构建移动应用而创建的,但我们相信,专注于许多平台并根据每个平台的优势和限制进行构建,会产生共生效应。当我们把这项技术扩展到桌面和虚拟现实时,我们看到了巨大的好处,我们很高兴能分享这对React Native的未来意味着什么。
尊重平台
我们的第一个指导原则是要符合人们对每个平台的期望。安卓用户期望使用TalkBack的无障碍应用程序。导航应该像在其他安卓应用中那样工作。一个按钮的外观和感觉应该与Android上的按钮外观和感觉一样。它不应该看起来和感觉像一个iOS按钮。尽管我们寻求提供一致的跨平台开发者体验,但我们抵制牺牲用户期望的诱惑。
我们相信React Native能让开发者满足用户的期望,同时也能获得更好的开发者体验的好处。在本节中,我们将分享以下内容。
- 通过接受平台限制,我们实际上改善了其他平台上的体验。
- 我们可以从机构知识中学习,建立更高层次的跨平台抽象。
- 每个平台上的其他玩家都会激励我们建立更好的开发者和用户体验。
拥抱平台约束
特定的设备硬件或用户期望带来了独特的约束和要求。例如,与iOS、macOS和Windows相比,Android和VR头盔上的内存通常更受限制。再比如,用户期望移动应用几乎能立即启动,但当桌面应用需要较长时间启动时,他们就不那么沮丧了。我们发现,通过使用React Native来处理这些问题,我们可以更容易地借用所学到的经验和为一个平台编写的代码,并将其应用于其他平台。
React Native和Relay为Android和iOS上的1000多个Facebook表面提供动力。
例如,React Native依赖于一种被称为 "视图扁平化 "的优化,这对减少Android上的内存使用量至关重要。我们从未为iOS建立过这种优化,因为它没有同样的内存限制。在过去的几年里,当我们建立新的跨平台渲染器时,我们不得不重新实现 "视图扁平化"。但这一次,它是用C++而不是特定平台的Java编写的。在iOS上尝试同样的优化,现在只是一个开关的问题。在生产的Facebook应用程序中,我们观察到,这改善了iOS上的性能 我们很可能永远不会为iOS建立这个,但我们在Android上的投资能够使我们在iOS上的投资受益。
向机构知识学习
React Native最初创建的原因之一是为了减少工程上的孤岛。在同一个产品上,安卓工程师和iOS工程师有一种被孤立的趋势。安卓工程师为安卓工程师审查代码,并参加安卓聚会和会议;iOS工程师为iOS工程师审查代码,并参加iOS聚会和会议。在不同平台上工作的工程师会带来独特的领域和机构知识,了解如何构建伟大的产品体验。
像React Native这样的跨平台框架的最佳成果之一是它们如何将具有巨大差异的领域专业知识的工程师聚集在一起。**我们相信,通过针对更多的平台,我们可以加速平台专家之间的机构知识的交叉渗透。
举个例子,React Native中的可访问性抽象受到了Android、iOS和Web各自以不同方式处理可访问性的影响。这使我们能够建立一个共同的界面,改善在两个移动平台上处理可及性提示的方式。
另一个例子是,我们对用户在网络上的速度感知的研究导致了像悬念这样的并发功能。在过去的一年里,这些功能被新的Facebook.com网站所审核。现在,随着我们新的渲染器的出现,这些功能正在进入React Native,并影响到我们如何设计事件调度和优先级。React团队对改善网络体验的投资正在使React Native在本地平台上受益。
竞争推动创新
除了特定领域的工程师和聚会和会议之外,每个平台还带来了其他解决类似问题的独特参与者。在网络上,React(直接支持React Native)经常从其他开源网络框架中汲取灵感,如Vue、Preact和Svelte。在移动领域,React Native受到了其他开源移动框架的启发,我们也一直在向Facebook内部构建的其他移动框架学习。
**我们相信,从长远来看,竞争会给每个人带来更好的结果。**通过研究每个平台上的其他玩家的优点,我们可以学到可能适用于其他平台的经验。例如,简化复杂网站的竞赛影响了React的发展,并使React Native在为移动应用提供声明式框架方面占据了先机。对更快的迭代周期和网络构建时间的需求也导致了快速刷新的发展,这对React Native大有裨益。同样,我们内部移动框架的性能优化--特别是围绕数据获取和并行化--挑战了我们改进React Native的方式,在我们构建新的Facebook.com网站时也影响了React。

React和Relay为Facebook.com网站提供动力。
扩展到新平台
React和React Native正处于一个转折点。React已经开始了React 18的发布之路,而新的React Native渲染器现在已经完全支持Facebook的移动应用。我们的团队在今年大幅增长,以支持Facebook日益增长的采用。在其他平台上开发的团队已经注意到了这种采用,并看到了他们也能获得React Native的好处的机会。
过去一年,我们一直与微软和Messenger团队合作,在Windows和macOS上创建真正的原生视频通话体验。 由于我们对移动应用的启动时间非常重视,我们最初使用React Native实现的桌面视频通话完全超越了它所取代的Electron实现的性能。在构建这一体验的前几周,我们录制了调整窗口大小的视频,其中有多个实时视频通话,并惊叹于其流畅的帧率。
构建桌面系统对我们来说是非常令人兴奋的。我们把我们在构建移动体验方面的知识,睁大眼睛应用于桌面。我们用多个子窗口、菜单栏、系统托盘等扩展了我们的视野。随着我们继续合作开发新的桌面Messenger功能,我们希望能找到影响我们在网络和移动端构建的机会。如果你想了解最新情况,我们的桌面协作工作正在GitHub上进行。
React Native支持Windows和macOS的Messenger视频通话。
我们还与Facebook现实实验室进行了更密切的合作,以了解React如何在Oculus上提供虚拟现实体验的独特定位。 用React Native构建VR体验将特别有趣,因为内存限制更严格,用户对交互延迟更敏感。
与我们对待React Native手机的方式类似,在我们公开分享任何东西之前,我们将在Facebook规模上验证我们的技术。很多东西仍在变化,我们仍有很多问题。我们希望在与社区分享之前,对该技术的生产准备和可靠性有信心。
虽然VR的大部分开发工作仍将在内部进行,但我们希望能尽快分享更多。我们还预计,用于VR的React Native的改进将在开源中浮现。例如,我们预计为VR用例减少内存使用的项目也会减少React Native在移动和桌面体验中的内存使用。
React和Relay为Oculus Home和其他许多虚拟现实体验提供动力。
当我们回顾行业如何采用React时,社区中一直有对React在更多平台上的渴望。甚至在我们向社区宣布React Native之前,Netflix就已经在制作Gibbon了,这是他们用React构建电视体验的定制渲染器。而在Facebook开始构建桌面版Messenger之前,微软已经在Office和Windows 10中使用React构建原生桌面体验。
摘要
总之,我们的愿景是将React Native的影响力扩大到移动领域之外,我们已经通过与Facebook的桌面和VR团队合作开始。我们知道,当我们接受每个平台的限制,从机构的知识中学习,并从其他参与者那里收集灵感时,就会使生态系统中的每个平台都受益。最重要的是,在这样做的时候,我们坚持我们的指导原则。
随着我们继续探索许多平台对React Native的解锁,我们对即将到来的事情感到兴奋。请与我们联系(@reactnative),以获得更多的更新和分享您的想法。