Hermes 与 JS 引擎策略
1. 现状结论
Hermes 是 RN 当前默认主路径引擎,JSC 已移到社区第三方支持路径。
证据:
- Android 历史切换:PR #34049
- iOS Pods 脚本:
jsengine.rb与react_native_pods.rb(默认 Hermes) - iOS bundling 脚本:
react-native-xcode.sh(Hermes 字节码编译分支)
2. Android 打包链路
BundleHermesCTask.kt:
- 先 Metro bundle
- 若启用 Hermes,再调用
hermesc生成字节码.hbc - 合并 packager 与 compiler sourcemap
价值:
- 运行时加载更直接
- sourcemap 可追踪到 Hermes 编译后产物
3. iOS 打包链路
react-native-xcode.sh:
- Debug Simulator 默认跳过 bundling(靠 Metro)
- Release/Device 执行 bundle
- Hermes 开启时将 JS bundle 编译为字节码并处理 sourcemap
4. 为什么强调“Hermes 默认化”
这不是“性能参数默认值”这么简单,而是:
- 构建链、调试链、sourcemap 链都围绕 Hermes 设计
- 生态文档、模板与工具都假设 Hermes 路径
- 关闭 Hermes 的代价已从“可选分支”变成“兼容分支”
5. 表述建议
“我会把 Hermes 看成 RN 的标准运行时,而不是优化插件。因为它已经深入到 Gradle/CocoaPods/Xcode 脚本和 sourcemap 管线里,架构层面与 New Architecture 是同方向演进的。”