当我用React Native开发混合应用程序时。当我从React本机代码创建Android-App时,我编写的JavaScript代码是否转换为用于Dalvik/Art运行时的Java-Code或Java-Bytecode?或者只是将UI组件编译成本机UI组件?或者像Fetch API这样的库会将JavaScript代码编译成Java-Code或Java-bytecode吗?
基本上,您编写JavaScript。Javascript与原生组件(Android上的Java,iOS上的Objective C,Windows上的C#)进行通信。
这种交流是通过所谓的“桥梁”进行的。如果在任何时候您觉得这种通信太慢了,您可以选择分别在Java,Objective C或C#中实现Javascript功能,以便纯本机运行。在本例中,您直接用本机代码编写,因此没有Javascript到本机编译。
这会为了性能而牺牲兼容性。通常情况下,这是没有必要的。
理解React本机桥概念
该代码仍然是JavaScript本机代码,不会转换为任何其他格式。混合应用程序在本机容器应用程序中运行,该应用程序调用JavaScript运行时引擎,负责执行JavaScript代码。我希望这能澄清问题。
基于“React Made Native Easy”一书:
本质上,可以将React Native视为一组React组件,其中每个组件表示相应的本机视图和组件。
React Native架构中还有两个部分:
>
Javascript VM:运行我们所有Javascript代码的JS虚拟机。在iOS/Android模拟器和设备上,React Native使用JavaScriptCore,这是支持Safari的JavaScript引擎。JavaScriptCore是最初为WebKit构建的开源JavaScript引擎。对于iOS,React Native使用iOS平台提供的JavaScriptCore。它最早是在iOS7和OS X Mavericks一起推出的。 以及这些部分之间的通信: React Native bridge:React Native bridge是一个C++/Java桥,负责本机线程和Javascript线程之间的通信。自定义协议用于消息传递。