2015年,react native被首次推出,使用reactjs框架开发原生跨平台应用程序。该框架获得了社区的大力支持,并凭借其web同行的名声逐渐普及,但其实该平台的原始设计并非没有缺点。
2018年,facebook团队宣布他们正试图解决多年来开发人员遇到的这些最常见问题,进行reactnative重构。这样的重构改善体现在哪些方面呢?本文将从性能和开发速度方面来谈一谈。
原构造
reactnative曾被称作“不依赖于平台”的应用框架。从某种程度上讲,该框架的主要目标是让开发人员编写javascript react代码,而react native可以在幕后部署其机制,以将reactreconciliation tree转录成可由原生基础设施解释的内容。它能够:
· 正确显示ui
· 访问原生功能
通常,android/ ios生态系统目前的机制如下所示:
每个react native应用程序中运行着3个并行线程:
· 阴影线程用来设计布局。它使用facebook自带的yoga布局引擎来设计flexbox布局并将其发送回ui线程。
· js线程读取和编译所有javascript代码以及执行应用程序大部分业务逻辑。将所有javascript代码融汇到一个文件中,并翻译任何其他javascript语法(例如jsx或ts),然后将此代码发送到javascriptcore引擎以便运行。
· 原生线程是运行原生代码的位置。每当需要更新ui或访问本机函数时,它将与js线程连接。它分为原生ui和原生模块。原生模块在启动时都处于预备状态,这意味着即使reactnative使用蓝牙模块,该蓝牙模块也始终处于运行状态。
使用桥接器可以连接js线程和原生线程,在后台,c++模块围绕一个异步队列构建。每当它从任一方获取数据时,都会将数据序列化为字符串并将其通过队列传递,并在到达时反序列化。
这意味着所有线程都依赖于跨网桥传输的异步json消息,并且这些消息发送到任一端,期望它们在将来的某个时间引发响应,但它还存在拥塞的风险。
每当浏览者在原生环境中拖动滚动条时,信息都会异步发送到javascript领域,但是原生环境不会等待java脚本执行工作并将其以另一种方式发送回去。这会造成延迟,屏幕上出现信息之前会一片空白。
同样,布局设计需要经过很多次才能在屏幕上显示,因为在原生设计布局之前,它需要想尽办法到达yoga引擎,当然这也意味着要通过桥接器。可以看到异步序列化来回发送json数据是怎样造成性能问题的,但是如何使javascript与本机通信呢?这就要靠jsi发挥作用了。
新架构
重构版的reactnative将逐渐弃用桥接器,转而采用新元素——javascript接口(jsi)。jsi的一些改进令人惊喜,首先就是js软件包不再依赖jsc。换句话说,现在可以轻松地将jsc引擎与其他(可能更高性能的)javascript引擎互换,例如v8。
第二个改进针对的是这种新架构的基础:“通过使用jsi,javascript可以保存对c++主机对象的引用并对其调用方法。javascript和原生领域将真正彼此了解。”
这也意味着jsi将允许所有线程之间完全互操作。通过共享所有权,javascript代码可以直接从js线程运行原生方法,不需要将要传递的消息序列化为json,这消除了桥接器上的所有拥塞和异步问题。
除了显著改善不同线程之间的通信之外,这种新架构还可以直接控制原生模块。这意味着我们可以在需要时使用原生模块,而不是在启动时将它们全部引导一次。这大大提高了性能,节省了启动时间。
在掌握了c ++的强大功能的基础上,懂得如何将react native用于定位非常大的系统面板是很容易的。
推出这么多年,reactnative已过时、待清理、需维护的部分已经积攒很多了,react native框架已经清除了某些功能,诸如webview或asyncstorage之类的模块正逐渐从react native核心中移出,将转变为社区管理的存储库。
凭借新的精简核心模块以及javascript代码与原生代码之间强大的互操作性机制,react native重构将实现许多性能改进和更全方位的开发人员工作流。它计划在2020年第四季度之前完成全面重组,更好的性能和全新开发体验十分令人期待。
零跑汽车滑向深渊 想再爬起来势必任重而道远
易方达刘武:新能源汽车乡下政策,将刺激下半年电动车销量增长
空中客车Skyways无人机为海上船舶运送了首批包裹,只需10分钟
西门子SMART200 PLC和西门子1200 PLC的Modbus TCP通讯实例
磷酸铁锂电池全介绍
React Native重构即将完成,改善版本有何不同?
控制系统与自动驾驶安全设计的关系
什么是同步多处理器
如何选择非接触式检测的液位传感器?
研究人员提出利用5G移动网络容量过剩的新方法
苹果M1芯片MacBook Air长时负载会降频
西门子S7-1500PLC系统电源和负载电源的应用区别
压力容器检修及安全预防措施
无人机检测大气时需要用到哪一些传感器
解读香农定理、奈奎斯特定理、编码与调制
基于ARM核的音频解码器单芯片系统研究
看准4000家AI企业 英特尔再战“AI江湖”
单片机系统中最常用的三种通信协议解析
LTCC技术在SIP领域的应用
美国对英国5G计划加大施压