React Native是否将JavaScript编译为Java for Android?

unl*_*101 48 javascript java android react-native react-native-android

当我使用React Native开发混合应用程序时.当我从React Native代码创建Android-App时,我编写的JavaScript代码是否会转换为Dalvik/ART Runtime的Java-Code或Java-Bytecode?或者只是编译为本机UI组件的UI组件?或者像Fetch API这样的库是否将JavaScript代码编译成Java-Code或Java-Bytecode?

Mar*_*arc 69

基本上,你写Javascript.Javascript与本机组件(Android上的Java,iOS上的Objective C,Windows上的C#)进行通信.

通过所谓的"桥梁"进行通信.如果您认为此通信过于缓慢,则可以选择分别在Java,Objective C或C#中实现Javascript功能,以便纯粹运行本机.在这种情况下,您直接使用本机代码编写,因此本机编译没有Javascript.

这将牺牲性能的兼容性.通常,这不是必需的.

  • 最好的答案因为它是如此描述性的.谢谢你.您是否在JavaScript逻辑和Java逻辑之间进行了任何性能比较?例如,您是否通过例如Fetch Api运行网络请求并将运行时与例如改造进行比较?当然,这更多地取决于网络速度而不是"本地"速度.也许您进行了其他性能比较,例如本地和通过JavaScript获取相机对象? (3认同)

Gur*_*ngh 22

代码仍然是JavaScript本机代码,不会转换为任何其他格式.混合应用程序在本机容器应用程序内运行,该应用程序调用JavaScript运行时引擎,负责执行JavaScript代码.我希望这澄清了这个问题.

  • React native不是混合体! (4认同)
  • @Led 我想也许您对混合动力的定义与世界其他地方不同。除了 Hybrid 之外的流行语基本上意味着“两者兼而有之” React 是 javascript,React Native Bridge 是 C/Java - 即有点 javascript,又有点本机。因此混合动力,就像混合动力汽车一样,它们有点电动,有点汽油。如果您对“混合”的理解仅意味着 webviews,那么正确,它不使用 webviews。然而,它仍然不是完全原生的,这将属于混合 - 无论如何,其中 90% 都是跨平台的 (3认同)
  • https://facebook.github.io/react-native/docs/javascript-environment.html (2认同)

Mor*_*yae 6

根据《 React Made Native Easy》一书:

本质上,React Native可以看作是一组React组件,其中每个组件代表相应的本机视图和组件。

React Native架构中也包含两个部分:

  1. 本机代码/模块:对于iOS,大多数本机代码是用Objective C或Swift编写的,而对于Android,则本机代码是用Java编写的。但是对于编写我们的React Native应用程序,我们几乎不需要为iOS或Android编写本地代码。

  2. Javascript VM:运行我们所有JavaScript代码的JS虚拟机。在iOS / Android模拟器和设备上,React Native使用JavaScriptCore,这是为Safari提供支持的JavaScript引擎。JavaScriptCore是最初为WebKit构建的开源JavaScript引擎。对于iOS,React Native使用iOS平台提供的JavaScriptCore。它最初是与OS X Mavericks一起在iOS 7中引入的。

对于这些部分之间的通信:

React Native桥: React Native桥是一个C ++ / Java桥,负责本机和Javascript线程之间的通信。自定义协议用于消息传递。


Bar*_*rak 5

我看到的最好的解释-

00:00 - 03:55

https://www.youtube.com/watch?v=6ZnfsJ6mM5c&t=1228s

“在编译后的本机应用程序中 - 所有 UI(按钮,文本...)都将被编译为本机代码(Java 或 Objective C),而 JavaScript 部分将保留 JavaScript。”

完整的解释 -

08:06-14:10

https://www.youtube.com/watch?v=qSRrxpdMpVc

在此处输入图片说明