鸿蒙跨端实践-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同步或异步交互。

➡️

继续阅读