React Native为何如此原生?

在深入研究React Native池之前,我很好奇这件事到底是如何工作的。 毕竟,开发人员无法忍受任何黑匣子,而通过任何抽象透视都是他们最喜欢的部分。 在使用任何React Native组件之前,我都仔细阅读了文档,讲座和会议。 在这个博客中,我将与您分享我的学习,希望您喜欢它。

我将使用两个领域来说明React Native的神奇之处-

原生球体

这是开发人员在iOS中使用Objective C / Swift和在Android中使用Java / Kotlin的地方。 React Native使用相同的球体来渲染其所有视图,并在主线程上完成。 这个范围使本机感觉保持完整,因此很难分辨应用程序是用本机语言还是React Native编写的。

JavaScript领域

它包含在单独线程上运行的JavaScript代码。 该领域中的代码由Javascript Engine执行。 React Native在这里放置了应用程序的业务逻辑和视图样式。 此处包含的任何代码均不会阻止UI,因此用户体验不会受到困扰。

两个球体都以闪电般的速度发挥作用。 然后,React Native设计了“桥梁”来连接这两个代码容器,并为开发人员提供了超能力:

“编写一次,在任何地方运行并保持其本机状态”

你们一定在想:“ 这座桥有什么特别之处?

好吧,让我们看一下这个设计合理的组件如何工作-
任何用户交互/事件都会在Native Sphere中检测到,并立即通过桥接传递给JavaScript Sphere进行处理。 JavaScript执行所需的计算,设置状态和属性(与其他编程语言中的参数相同)。但是在React Native中,它称为属性。 完成后,它会序列化数据,并通过网桥将其发送回本机球体以进行视图渲染。

桥接上的任何传递(从Native到Java或从Javascript到Native的调用)都会降低性能图。 这就是为什么要付出很多努力才能使此桥无缝运行的原因。 它支持:

异步执行 – JavaScript代码保持执行状态,而无需等待本机调用完成。 正如我之前提到的,JavaScript领域中的任何活动都不会妨碍用户体验,异步调用使React Native应用程序具有很高的性能。

序列化-通过网桥进行的任何通信都包括可序列化消息的交换。 为什么出现问题,为什么React Native不让两个领域共享数据? 让我们讨论这种方法的局限性。 两个领域中的代码执行都是相互独立的。 如果数据是共享的,则很难确定何时释放分配的内存。 最终将导致内存泄漏。

另一个结果是数据损坏,以防两个领域同时读取/写入共享数据。 虽然它可以被同步以避免冲突。 但是,这一次只允许一个球体访问数据。 另一个领域将不得不继续等待访问,从而阻碍了其无缝代码执行。

批处理 –面纱下,经过桥之后,JavaScript代码将转换为本地代码。 这些通过次数必须保持在最低限度,以便您的应用程序不会变得迟钝。 因此,在将JavaScript代码语句发送到另一个领域之前,先对其进行批处理。 让我让您轻松理解这个概念:

(✘)4过桥

代码块1 —->代码块1
代码块2 —->代码块2
代码块3–>代码块3
代码块4 —->代码块4

(✓)2过桥

代码块1] \ _ _代码块1
代码块2] /代码块2

代码块3] \ _ _代码块3
代码块4] /代码块4

现在,您必须清楚,React Native是一个出色设计的框架,为跨平台移动应用程序开发提供了新的维度。 在很小的时间间隔内获得广泛的欢迎标志着其成功的初始阶段。 来自世界各地的开发人员正在为框架及其模块做出积极的贡献。 无论您是网络开发人员还是移动开发人员,都应尝试一下并在评论中分享您的经验。

希望你们喜欢阅读。 我的下一篇博客文章还有更多内容。 自3年以来,我一直在为iOS开发应用程序,并将分享我在React Native上开始开发的经验。 我还将就React Native中的功能与iOS的不同之处进行比较。 这将帮助您了解从iOS转到React Native时的生活。


该博客由 Rahul Verma 撰写, 最初于 2017 年9月14日 发布在 blogs.quovantis.com 上。