[ReactNative翻译]新的React Native架构解读——第二部分:JSI和JSC

633 阅读3分钟

原文地址:formidable.com/blog/2019/j…

原文作者:Lorenzo Sciandra

发布时间:2019年4月2日

第二部分:JSI和JSC

React Native重新架构于2018年首次公布,是Facebook为解决这一跨平台移动解决方案的一些长期问题而进行的大规模努力。

在这个系列中,我们将对构成React Native新架构的主要元素进行概述。我们将避免展示代码,以使这一解释尽可能容易理解,并将分享我们对这一新实现的兴奋。

在第二篇文章中,我们将深入探讨React Native是如何消耗你编写的代码,以及重新架构是如何改变它的。

由于JavaScript的性质,React Native团队必须依靠一个引擎来解释它,以便它能够在原生移动应用中运行。在目前的架构中,根据苹果的iOS指南规则 "要使用合适的WebKit框架和WebKit JavaScript"(JSC是WebKit使用的),团队选择直接使用JavaScriptCore(JSC)。

为了增强这个元素,(当前React Native架构的第二块)他们决定将产生的捆绑和minified JavaScript与编写的代码,以及将 "消化它 "的引擎适当分离。通过在两者之间引入第三个元素,明确地称为JavaScript接口(JSI),这才成为可能。

JSI本身并不是React Native的一部分,它是一个统一的、轻量级的、通用的层,适用于(理论上)任何JavaScript引擎。但是,当插入到新架构的更广泛的拼图中时,它允许一些真正重要的改进。

第一个是相当直观的--有可能,JSC现在可以更容易地换成其他引擎(或者JSC的新版本,就像最近在RN 0.59中发生的那样)。你可能知道的其他选择有微软的ChakraCore和Google的V8。

第二个改进--可以说是整个重构架构的基石--是 "通过使用JSI,JavaScript可以持有对C++主机对象的引用,并对其调用方法"。这意味着,我们终于解决了上一篇文章中解释的核心问题:JavaScript和Native两个领域将真正意识到对方,而且不需要将要传递的消息序列化为JSON,消除了桥上的所有拥堵(我们将在下一篇文章中进一步探讨)。

这是一个非常令人兴奋的变化,因为长期以来,C++一直是Android和iOS之间共享代码而不依赖JavaScript的少数方式之一;Android的原生代码是用C\C++编写的(Java和Kotlin通过Java原生接口被 "翻译下来"),同样iOS也默认支持它(Objective-C无非是C的严格超集)。

所以,React Native的这一步重新架构,既实现了对当前结构的大规模改变,又为你的应用写更多的C++打开了一扇门,也实现了更容易的brownfield方式。

如果我们把架构的第二块换成新的对应结构(你可以在第一篇文章中找到完整的图),变化会是这样的。

我们对重新架构的探索的第二部分到此结束。在接下来的几周里,我们将发布更多的文章来深入探讨其他模块。同时,记得与你的开发者朋友们分享这篇文章,或者在Twitter上联系后续问题(DMs是开放的)。

正如你可以想象的那样,这些变化为下一个区块中更多的改进打开了大门,我们希望它们能激发你的兴奋,关于它们将如何影响你的代码库,而不需要任何重写。

所有的人都登上了炒作的列车

其他部分。

第一部份第三部份第四部份


通过www.DeepL.com/Translator (免费版)翻译