31 篇博文 含有标签「公告」
查看所有标签帮助迁移 React Native 库到新架构
简短摘要:我们正在改进支持 React Native 新架构的资源。我们已经发布了一个帮助迁移您的应用的仓库(RNNewArchitectureApp)以及一个针对库的仓库(RNNewArchitectureLibraries)。我们还在改造网站上的新架构指南,并创建了一个GitHub 工作组,以解答与新架构相关的问题。
React Native 无障碍支持 - GAAD 2022 更新
2022 年 5 月 19 日迎来了第 11 届全球无障碍意识日(Global Accessibility Awareness Day),我们希望向大家更新我们在 React Native 框架无障碍方面取得的进展。Meta(前 Facebook)是 2020 年首个承诺参与 GAAD 的组织,承诺致力于让 React Native 框架实现无障碍。
“我们希望这项承诺能够让使用 React Native 的开发者更容易创建完全无障碍的移动应用,并激励其他组织做出类似承诺,推动更无障碍的未来。”
这一过程最初从对框架进行了全面评审和差距分析开始,重点关注 React Native 在 iOS 和 Android API 上支持无障碍功能的情况。此后,数十个问题被修复或关闭,兑现了让 React Native 实现无障碍的承诺,并推动框架的无障碍能力持续前进。
这还不是终点,在 2022 年初,我们再次审查并优先处理了差距分析中剩余的问题,详细列于 React Native 无障碍改进看板,根据其对开发者和最终用户的影响进行了排序。
宣布发布 React Native 0.68
大家好!今天我们宣布 React Native 0.68.0 版本发布,本次版本支持可选启用新的 React Native 架构,包含错误修复等更多内容。
目录
新架构推广的最新进展
大家好,
正如之前所公布:
2022 年将成为开源领域新架构的大年。
如果你还没有时间深入了解新的 React Native 架构(Fabric 渲染器和 TurboModule 系统),现在正是最好的时机!
我们想与社区分享一些我们准备的举措和资料,确保每个人都能一起参与这项工作。
迈向 Hermes 成为默认引擎
自从我们在 2019 年宣布 Hermes以来,它在社区中的采用率不断提升。Expo 团队维护着一个流行的 React Native 应用元框架,最近在被列为 Expo 最受期待的功能之一后,宣布了对 Hermes 的实验性支持和后续支持。而Realm,一个流行的移动数据库,也近期发布了对 Hermes 的alpha 支持。在这篇文章中,我们想重点介绍过去两年里推动 Hermes 成为 React Native 最佳 JavaScript 引擎的一些最激动人心的进展。展望未来,我们相信,凭借这些改进和即将到来的更多更新,我们可以让 Hermes 成为所有平台上 React Native 的默认 JavaScript 引擎。
2021年下半年 React Native 发展
过去一年,我们的世界变化巨大,React Native 也不例外。我们欢迎了新成员加入团队(期待将来能与他们见面!),项目日益成熟,也涌现了新的机遇。很高兴在本文及后续文章中与大家分享这一切!
在 Facebook,我们的团队按半年为一个周期工作。每个半年周期,我们会检视战略、制定计划,并在内部共享。今天,我们想与社区分享2021年下半年的计划。
2021年下半年对 React Native 来说是激动人心的一段时间。我们的关注重点包括培养社区、开始向开源社区推广新架构,以及推动技术进步。
宣布 React Native 0.65 版本发布
今天我们发布了 React Native 0.65 版本,带来了新版 Hermes、无障碍功能改进、依赖包升级等诸多更新。
Hermes 0.8 有哪些新特性?
Hermes 是 Facebook 为 React Native 优化的开源 JavaScript 虚拟机,本次升级到了 0.8.1 版本。本次发布的一些亮点功能包括:
- 引入了新的并发垃圾回收器 “Hades”,在 64 位设备上暂停时间最多缩短 30 倍。在 Facebook 内部,我们观察到部分 CPU 密集型任务性能提升了 20%-50%。可在此了解 Hades。
- ECMAScript 国际化 API (ECMA-402,简称
Intl) 现已内置于 Android 版本的 Hermes 并默认启用,API 大小开销仅为 57-62K(相比之下,JSC 达到 6MiB)。因此 Hermes 用户不再需要地区语言相关的 polyfill。特别感谢 @mganandraj 及微软的合作伙伴们促成了这项实现! - iOS 版 Hermes 现已支持 Apple M1 Mac 和 Mac Catalyst!
- 内存优化,包括小整数(SMI)和指针压缩,使 JS 堆内存缩小了 30%。
Function.prototype.toString的改动,修复了因错误的特征检测导致的性能下降,并支持了源码注入的使用场景。
完整的 Hermes 更新日志请见此处。
如果你尚未启用 Hermes,请按这里的步骤将你的应用切换到 Hermes,以享受以上新特性和性能提升!
无障碍修复和新增功能
去年,Facebook 承诺加入 GAAD 提升 React Native 的无障碍体验。0.65 版本汇报了该承诺带来的成果以及其他无障碍改进!主要变化包括:
- 允许在 iOS 上指定高对比度的浅色和深色值,详情请参阅文档。
- 在 Android 上新增了
getRecommendedTimeoutMillisAPI。该接口公开了用户在 Android 无障碍选项中设置的默认超时时间,方便需要更多时间查看或操作控件的用户。 - 修复了 TalkBack/VoiceOver 对组件状态(例如
disabled和unselected)的正确朗读。
你可以在这里关注或参与我们待解决的无障碍问题!
依赖版本更新及注意事项
react-native-codegen版本0.0.7现在需要作为package.json中的devDependency。- JCenter 已经停止服务并转为只读。我们已移除 JCenter Maven 仓库,相关依赖改用 MavenCentral 和 Jitpack。
- OkHttp 升级到 v4.9.1,详情参见升级到 OkHttp 4。
- Flipper 升级到 0.93 版本,以支持 Xcode 12.5。详见 Flipper 更新日志。
- 支持 Android Gradle Plugin 7。
- Apple Silicon 需要链接器的补丁,具体见 @mikehardy 的说明。
感谢!
此次发布包含了来自 61 位贡献者 的超过 1100 条提交。感谢所有为本次版本贡献和支持的朋友!完整更新日志请见 这里。
GAAD 承诺 — 一年后的回顾
距 Facebook 承诺加入 GAAD Pledge 以提升 React Native 无障碍功能已有一年,该项目超出了我们的预期。我们很高兴宣布,这个项目将在 2021 年持续推进,并希望向大家更新迄今为止的进展情况。在去年对 React Native 无障碍差距进行全面分析后,填补这些差距的工作已经开始。
我们从 90 个未解决的差距分析问题入手,自 2021 年 3 月该项目在 GitHub 启动以来,到现在为止:
-
社区关闭了 11 个问题。
-
React Native 团队评估并关闭了 19 个问题。
-
9 个拉取请求被合并。
-
1 个拉取请求被合并到 React Native 文档中。
我们要感谢 React Native 社区在过去一年里为打造更无障碍的 React Native 所做的重大努力。每位贡献者的付出都促进了 React Native 无障碍性的提升。
宣布 React Native 0.64 在 iOS 上支持 Hermes
今天我们发布了 React Native 0.64,新增了在 iOS 上支持 Hermes。
iOS 上的 Hermes 选择启用
Hermes 是一个开源的 JavaScript 引擎,专为运行 React Native 优化。它通过减少内存使用、减小下载包体积以及缩短应用可用时间(即“交互时间”,TTI)来提升性能。
在本次发布中,我们很高兴地宣布,你现在也可以在 iOS 上使用 Hermes。要启用 iOS 上的 Hermes,请在你的 Podfile 中将 hermes_enabled 设置为 true,然后运行 pod install。
use_react_native!(
:path => config[:reactNativePath],
# 在 iOS 上启用hermes,将 false 改为 true 并安装 pods
:hermes_enabled => true
)
请注意,iOS 上的 Hermes 支持仍处于早期阶段。我们暂时保持其为可选启用状态,同时继续进行基准测试。我们鼓励你在自己的应用中尝试,并告知我们其表现如何!
默认启用 Inline Requires
Inline Requires 是 Metro 的一个配置选项,它通过延迟 JavaScript 模块执行直到实际使用时,来提升启动速度,而不是在启动时全部执行。
该功能已存在多年,并作为一个可选配置在我们的性能文档部分中推荐使用。我们现在默认为新应用启用此选项,帮助用户无需额外配置即可获得快速的 React Native 应用启动速度。
Inline Requires 是一个 Babel 转换,将模块导入转换为内联形式。举例来说,Inline Requires 会把模块导入从文件顶部转移到实际使用的位置。
之前的写法:
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>;
};
关于 Inline Requires 的更多信息请参阅 性能文档。
使用 Chrome 查看 Hermes 跟踪
过去一年,Facebook 赞助了 Major League Hacking 资助项目,支持对 React Native 的贡献。Jessie Nguyen 和 Saphal Patro 贡献了使 Chrome DevTools 的 Performance 标签页能可视化在 Hermes 环境下运行应用的执行情况的功能。
详细信息请查看 新文档页面。
带 Proxy 支持的 Hermes
我们为 Hermes 添加了 Proxy 支持,使其兼容流行的社区项目,如 react-native-firebase 和 mobx。如果你之前使用了这些包,现在可以迁移到 Hermes。
我们计划在未来版本中让 Hermes 成为 Android 的默认 JavaScript 引擎,因此正在解决用户在使用 Hermes 时碰到的剩余问题。如果还有问题阻碍你的应用采用 Hermes,请在 Hermes GitHub 仓库 提交 issue 反馈。
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.js 最低支持版本由 10 升级至 12
- Flipper 升级至 0.75.1
致谢
感谢数百位贡献者助力 0.64 发布!0.64 变更日志 列出了本次发布包含的全部更改内容。







