鸿蒙跨端实践-JS虚拟机架构实现
💡
原文中文,约5800字,阅读约需14分钟。
📝
内容提要
在Roma跨端方案中,JS虚拟机是核心,负责执行JS代码。Android使用J2V8,iOS用JSCore,HarmonyOS需自行实现。开发经历了从ArkTs2V8到JSVM的新架构,解决了多语言通信和数据转换的挑战。引入JSI增强代码共享,采用C++设计提升性能。新架构使用系统内置虚拟机,减少跨语言性能损耗,通过HostObject实现JS与原生的直接通信,优化流程,总结了从0到1的实现经验。
🎯
关键要点
- Roma跨端方案中,JS虚拟机是核心,负责执行JS代码。
- Android使用J2V8,iOS用JSCore,HarmonyOS需自行实现虚拟机。
- 开发经历了从ArkTs2V8到JSVM的新架构,解决了多语言通信和数据转换的挑战。
- 引入JSI增强代码共享,采用C++设计提升性能。
- 新架构使用系统内置虚拟机,减少跨语言性能损耗。
- 通过HostObject实现JS与原生的直接通信,优化流程。
- ArkTs2V8框架依赖V8引擎,初期使用QuickJS引擎,后期自编译V8。
- JSI作为通信层,增强代码的可扩展性,促进更有效的代码共享。
- 内存管理由ArkTs2V8负责,需避免内存泄露。
- 跨语言性能问题需通过压缩通信次数或JSON序列化来解决。
- 新架构C++化,提升框架性能,解决线程管理问题。
- JSVMRuntime实现了HarmonyOS的内置虚拟机,稳定性和维护成本更优。
- HostObject实现了原生与JS的双向映射,简化了交互流程。
- 总结了从0到1实现鸿蒙版“j2v8”、“JSRuntime”的经验,提升了性能和用户体验。
❓
延伸问答
鸿蒙虚拟机的核心功能是什么?
鸿蒙虚拟机的核心功能是执行动态化的JS代码。
HarmonyOS中虚拟机的实现与Android和iOS有何不同?
HarmonyOS需要自行实现虚拟机,而Android使用J2V8,iOS使用JSCore。
JSI在鸿蒙跨端方案中起到什么作用?
JSI增强了代码的可扩展性,促进了更有效的代码共享,并实现了JS与C++原生代码的直接通信。
ArkTs2V8架构在内存管理上面临什么挑战?
ArkTs2V8架构面临手动内存管理的挑战,容易造成内存泄露。
新架构C++化的主要优势是什么?
新架构C++化可以直接进行C++通信,提升性能并解决线程管理问题。
HostObject在鸿蒙虚拟机中如何实现原生与JS的交互?
HostObject实现了原生与JS的双向映射,允许原生模块与JS同步或异步交互。
➡️