React Native 0.64 发布,iOS 支持 Hermes
今天,我们发布了 React Native 0.64,它支持在 iOS 上使用 Hermes。
iOS 上的 Hermes 选择加入
Hermes 是一个开源的 JavaScript 引擎,针对 React Native 运行进行了优化。它通过降低内存使用、减少下载大小以及缩短应用可用时间或“互动时间”(TTI)来提升性能。
在此版本中,我们很高兴地宣布您现在也可以使用 Hermes 在 iOS 上构建应用。要在 iOS 上启用 Hermes,请在您的 Podfile
中将 hermes_enabled
设置为 true
,然后运行 pod install
。
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => true
)
请注意,iOS 上的 Hermes 支持仍处于早期阶段。我们将其设置为选择加入,因为我们正在进行进一步的基准测试。我们鼓励您在自己的应用中尝试它,并告知我们您的使用情况!
默认启用内联 Require
内联 Require 是一个 Metro 配置选项,它通过延迟 JavaScript 模块的执行(直到它们被使用时才执行,而不是在启动时执行)来缩短启动时间。
此功能已经存在几年了,并且建议作为选择加入的配置选项,在我们的文档的性能部分中列出。我们现在默认在新应用中启用此选项,以帮助用户在无需额外配置的情况下拥有快速的 React Native 应用。
内联 Require 是一个 Babel 转换,它将模块导入转换为内联。例如,内联 Require 将此模块导入调用从文件顶部转换为其使用位置。
之前
import {MyFunction} from 'my-module';
const MyComponent = props => {
const result = MyFunction();
return <Text>{result}</Text>;
};
之后
const MyComponent = props => {
const result = require('my-module').MyFunction();
return <Text>{result}</Text>;
};
有关内联 Require 的更多信息,请参阅性能文档。
使用 Chrome 查看 Hermes 追踪
在过去的一年中,Facebook 赞助了Major League Hacking 奖学金项目,支持对 React Native 的贡献。Jessie Nguyen 和Saphal Patro 添加了使用 Chrome DevTools 上的“性能”选项卡来可视化应用在使用 Hermes 时执行情况的功能。
有关更多信息,请查看新的文档页面。
支持代理的 Hermes
我们在 Hermes 中添加了代理支持,从而可以与 react-native-firebase 和 mobx 等流行的社区项目兼容。如果您一直在使用这些包,现在可以将项目迁移到 Hermes。
我们计划在即将发布的版本中将 Hermes 设为 Android 的默认 JavaScript 引擎,因此我们正在努力解决人们在使用 Hermes 时遇到的剩余问题。如果您遇到任何阻止您的应用采用 Hermes 的问题,请在Hermes GitHub 仓库上提交问题。
React 17
React 17 不包含面向开发人员的新功能或重大更改。对于 React Native 应用,主要更改是新的 JSX 转换,使文件不再需要导入 React 即可使用 JSX。
有关 React 17 的更多信息,请参阅React 博客。
主要依赖项版本更改
- 放弃了 Android API 级别 16-20。Facebook 应用始终会放弃对使用率足够低的 Android 版本的支持。由于 Facebook 应用不再支持这些版本,并且它是 React Native 的主要测试环境,因此 React Native 也将放弃支持。
- 需要 Xcode 12 和 CocoaPods 1.10
- 最低 Node 支持从 10 提升到 Node 12
- Flipper 升级到 0.75.1
致谢
感谢数百位贡献者帮助实现了 0.64!0.64 版本变更日志 包含此版本中的所有更改。