经过漫长的等待,React Native 终于迎来了0.72 版本,此处版本带来了Metro重要的功能更新、性能优化、开发人员体验的改进以及其他一些重要的变化。我们可以从下面的链接中获取此次版本更新的内容:0.72更新内容
一、Metro 新功能
众所周知,Metro 是 React Native 默认的 JavaScript打包模块,由于Metro最近进行了一些新功能的更新,React Native 0.72 版本也引入了 Metro 中的几个重要功能以及对原有的功能进行了升级。
1.1 支持 symlinks
此版本的一个很重要的亮点是增加了对 Metro 中 symlinks 的 beta 版本支持,这也是社区一直长期要求的功能之一。
简单来讲,该功能允许 Metro 去追踪 symlinks,从而支持各种以前不受支持的项目结构和工具。这一变化让 React Native 与 monorepo 设置和 pnpm 无缝协作,消除了对复杂解决方法或第三方工具的需求。
1.2 支持包导出
同样,Metro 中添加了对 包导出 的支持,为 package.json 中的 main 字段提供了替代方案。借助包导出支持,库的作者现在可以明确定义用户应该可以访问其包的哪些部分,从而提供更好的封装并减少潜在的命名冲突。此增强功能简化了将外部库集成到 React Native 项目中的过程,并促进更好的代码组织。
1.3 启用新功能
如果想要在项目中启用上述两个新功能,只需要在 metro.config.js 配置文件中更新这两个配置即可,如下所示。
const config = {
// …
resolver: {
unstable_enableSymlinks: true,
unstable_enablePackageExports: true,
},
};
二、开发者体验的改进
相信各位 React Native 开发者经常在开发过程中经常会遇到下面这个 RedBox 页面。
由于React Native支持热重载,所以,只要项目编译不过就会显示这个RedBox页面,React Native 在 0.72 版本对此也进行了一些优化:
2.1 无效样式不再通过 RedBox 提示
在 React Native 0.72 中,开发过程中无效样式不再以 Redbox 的形式展示,而是和普通的警告一样记录到控制台,使开发人员更容易识别和修复样式错误,而不会影响用户体验。此更改提高了 React Native 应用程序的整体可用性,并提供了更流畅的开发工作流程。
2.2 Hermes 更新
Hermes 引擎改进了尝试调用未定义函数的错误消息,现在是直接 显示被调用的变量名称。这听起来可能很小,但相比之前的 undefined is not a function 提示相比,这可以说是一个很大的改进了。此外,堆栈跟踪现在会过滤掉内部字节代码帧,从而提供更具可读性的调用堆栈。
同时,由于Hermes 改善了编译时间,使用改进 Hermes 的去重算法,编译速度加快了 97%。这些改进将有利于捆绑许多对象的应用程序的构建时间。对 JSON 解析的多项优化也已落地,对使用 redux-persist 等严重依赖 JSON 操作的库的应用有利。
最后,React Native CLI 本身也在此版本中进行了更新,其中包括减少重复、澄清措辞、减少冗长的堆栈跟踪,以及在以下命令 init、run-android 和 run-ios 中添加相关文档的深度链接等等。
三、新架构更新
如果您有一直关注 React Native 的更新,就会知道每个新版本都会对 新架构 进行一些优化和改进,React Native 0.72 也不例外。
3.1 Fabric 渲染性能提升
新的 Fabric 渲染引擎得到了提升:文本渲染性能在 iOS 上提高了 27%,在 Android 上提高了 18%。具体可以参考:github.com/reactwg/rea…
3.2 Hermes 引擎性能提升
新架构的 JavaScript 引擎 Hermes 也做了许多性能改进:
- 大型 object 的编译速度更快了
- 对 JSON parse 进行了多项优化
这些改进将特别有利于您的应用进行大量 JSON 操作或者打包大量的对象。最后,对于 iOS,新架构现在与常用的 use_frameworks 兼容! CocoaPod 配置——这对于许多应用程序集成先前版本的新架构来说是一个障碍。
由于新架构目前是实验性的,为了使更新集中于他们的目标受众,我们将在 0.72 和未来的版本中把新架构的更新转移到专门的工作组,后面的将会重点推荐新架构的诸多功能落地。
四、移除废弃的组件
除了新增的功能外,React Native 0.72 也对某些组件或功能进行了移除,并将它们提取到了社区中,如果您正在使用这些组件,只需找到并安装推荐的社区包即可。
- Slider 被 @react-native-community/slider 所取代
- DatePickerIOS 被 @react-native-community/datetimepicker 所取代
- ProgressViewIOS 被 @react-native-community/progress-view 所取代
五、如何升级
那如何将React Native项目的版本升级到0.72呢,我们可以先阅读升级帮助文档,然后根据升级指南进行升级即可,如果使用的已经是最新版本,直接使用下面的命令创建项目:
npx react-native@latest init MyProject
五、总结
如果您也是一名长期从事 React Native 工作的开发者,那么就会知道性能不佳一直是 React Native 一个最受开发者诟病的问题。不过可以看到的是,在过去的几个版本中,特别是随着新架构的引入,React Native 的性能问题已经得到了大幅度的提升,相信未来会更好。
最后,React Native还没 “死”,很多大厂的跨平台项目都可以看到它的影子,而且我相信它会越来越好。
参考:
React Native 0.72 - Symlink Support, Better Errors, and more