ReactNative 简述(1)

ReactNative 简述

简述

现在比较主流的跨端开发框架就是ReactNative和Flutter,这两个框架的底层技术和思路完全不同,我们在学习完ReactNative的核心原理之后,也会去学习一下Flutter。
ReactNative的跨端思路还是通过原生的组件来实现UI效果,只不过在上层使用JS来描述构建View树,这个比较明显的好处就是使用JS来编写,对于前端的研发学习成本很低,而且JS作为一个解释语言,想要实现热更新逻辑非常简单。但是也有一些缺陷,就是JS语言和Native通信会有一定的耗时,虽然现在使用的新架构JSI一定程度减少了这个耗时,但是还是有着一些影响的,同时由于Android自身没有直接支持JS引擎,所以ReactNative的应用需要在启动时去加载JS引擎,这样应用启动也会有一些耗时,且这种通过JS语言去映射底层原生组件的方式,当需要实现比较复杂的UI,就需要针对每个平台都去实现一个Fabric组件,这样不利于跨端只使用一套代码。

Flutter是一种更加新的思想,使用dart语言,然后在所有端都使用skia引擎直接来绘制UI,这样就可以有着近乎原生应用的性能。Skia是一个绘制库,我们之前在介绍opengl的时候介绍过,Android 2D的绘制是会使用skia的,在Android上skia底层最终也会转换为OpenGL,所以如果使用skia来渲染UI,性能确实是和原生一样,相当于它为各个端统一了一套Native的UI绘制接口,从技术上来看,Flutter确实更加的先进,但是ReactNative目前的使用更加的多(个人感觉),组件生态以及文档也更加全面,两者各有优劣,我们会逐一来学习他们。

框架结构

ReactNative的实现原理其实比较简单,只是它应用了非常多的框架,如果要学习每个框架的细节,那就需要非常多时间和精力,我们主要聚焦ReactNative自身实现的原理和思想。

ReacNative的架构有过一次大改版,主要改动就是Bridge,之前是通过一个Bridge来实现JS和底层C++/OC来通信的,但是这个通信的代价比较大,所以后面就对框架进行优化,我们主要聚焦于新框架。

  • JS引擎
    ReactNative编写UI是使用JavaScrpit的,JavaScript是一个解释语言,需要有一个JS引擎才能执行,也就是虚拟机,以前ReactNative使用的JS引擎是JavaScriptCore,这个JS引擎是苹果提供的,IOS会默认支持这个引擎,所以会很大程度优化IOS上RN应用的启动速度。新框架中,RN使用的JS引擎是Hermes,这个是FaceBook自己专门为RN开发的一套JS引擎,JS引擎的逻辑非常复杂,因为它的设计会非常大程度影响JS语言的执行速度,我们不会去研究JS引擎的源码。
  • React
    上层使用了一套React框架,这个是一个前端框架,我们也不会去研究它的源码,这里简单介绍一下它的作用,我们知道UI的描述一般都会使用一个树来管理,Android里View也是一个树,那么JS层也需要有一个对应的树结构,我们用JS来描述UI,需要先在JS层构建一个树结构,然后再根据JS层的树结构来构建Native层的树结构,再去映射到真正的View,React就是做这个事,构建JS层的视图结构,在浏览器中就是DOM节点。
  • JSI
    JSI是基于JS引擎提供的api做了一个轻量级的封装,它提供JS层和C++/OC层相互通信的能力,真正通信能力当然是JS引擎提供的,每个JS引擎都会提供一个api,但是他们的api可能不一样,JSI的作用也是磨平这个差异,JSI可以根据不同的引擎做不同的实现,但是提供对外一致的接口。
  • TurboModule
    这个就是基于JSI,使用Codegen生成代码,提供一套脚手架,实现JS和底层通信,它的作用定位有点类似于aidl,我们通过自定义不同TurboModule可以实现不同的模块功能,比如Android和IOS的Native蓝牙接口肯定不同,我们可以定义一个蓝牙的TurboModule,使用代码生成器Codegen生成脚手架,然后在IOS和Android上做不同的实现,提供JS相同的接口。
  • Fabric 渲染器和组件
    这个也是基于JSI,使用Codegen生成代码,提供一套脚手架,他和TurboModule的区别就是框架结构不同,因为他们的作用不同,它的作用主要是UI组件,所以它还需要包含一些基础的东西,比如Props,State等。

我们不太会去介绍RN怎么使用,因为使用文档官网写的已经比较全面了,我们主要是探究一下它的原理,使得我们看到RN的红屏报错堆栈可以知道怎么排查原因,而不是一脸懵逼重复看使用文档
检测半天哪里做错了,结果花了一天发现名字打错了啥的。

涉及内容

  • 启动应用流程
  • TruboModule
  • JSI
  • Fabric渲染

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/56975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云镜像源无法访问?使用 DaoCloud 镜像源加速 Docker 下载(Linux 和 Windows 配置指南)

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🍃 vue-uniapp-template 🌺 仓库主页: GitCode💫 Gitee &#x1f…

银河麒麟V10系统下libopenblas.so.0和libllmlmf库的安装

1、当前linux服务器系统是银河麒麟V10,具体的内核和cpu型号如下: 2、使用:uname -a来进行查询 Linux localhost.localdomain 4.19.90-89.16.v2401.ky10.x86_64 #1 SMP Sat Sep 14 13:09:47 CST 2024 x86_64 x86_64 x86_64 GNU/Linux 3、在部署QT开发的应…

高清 MV 无字幕视频素材

在当下的短视频和自媒体时代,高清无字幕的视频素材无疑是创作者们的“得力助手”。不管是用于剪辑情感励志视频、制作搞笑段子,还是创作风景航拍视频,优质的素材库都能让你的创作如虎添翼。今天,我就为大家介绍几个海外的高质量素…

如何使用Qlik Sense Util

Qlik Sense Util 是 Qlik Sense 的一个实用工具,它可以帮助管理员执行各种配置和维护任务。 以下是使用 Qlik Sense Util 工具的一些基本步骤: 1. **运行 QlikSenseUtil.exe**: - 在中心节点上,打开文件资源管理器并导航到 C:…

UML之用例视图

目录 介绍用例视图的组成元素参与者表示法如何确定参与者 用例 介绍 用例图是表示一个系统中用例与参与者之间关系的图,它描述了系统中相关用户和系统对不同用户提供的功能和服务。 对于用户而言,最关心的是一个系统具有的功能与呈现的外部特性&#xf…

服务器作业2

架设一台NFS服务器,并按照以下要求配置 关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 配置文件设置: [rootlocalhost ~]# vim /etc/exports 1、开放/nfs/shared目录,供所有用户查询资料 共享…

Scott Brinker:Martech App 的未来在中小企业和中端市场

中端市场营销支出增加 Product Hunt网站上每周发布的与营销技术相关的产品数量和TechCrunch网站上发布的新融资公告数量持续增加。最近,很多公司都在借助OpenAI、Azure和AWS的新API,赶上生成式人工智能的浪潮。可以肯定的是,有很多重复的想法…

IDEA集成AI的DevAssist插件使用指南

DevAssit使用背景,这类工具通常旨在帮助开发者提高效率,简化开发流程。这类工具包括但不限于: 代码编辑器插件:提供自动补全、代码提示等功能。 构建工具:帮助自动化构建过程。 调试工具:提供更强大的调试功…

anaconda 创建环境失败 解决指南

anaconda 创建环境失败 解决指南 一、问题描述 我在宿舍有一台电脑。由于我经常泡在实验室,所以那台电脑不是经常用,基本吃灰。昨天晚上突然有在那台电脑上使用Camel-AI部署多智能体协同需求,便戳开了电脑,问题也随之而来。 当…

学习新技能的五大步骤

学习新技能的五大步骤 学习新技能是一个令人兴奋的过程,但也需要耐心和毅力。以下是五个关键步骤,帮助你更有效地掌握新技能: 1. 这东西是什么? 在开始学习之前,首先要了解你将要学习的技能或工具是什么。这包括它的…

河北统计年鉴(2000-2021年)

《河北统计年鉴》不仅记录了河北省经济社会发展的历史轨迹,还系统地展示了其现状。它涵盖了经济发展、人口就业、社会事业、居民生活、环境保护等多个领域的数据资料 2000-2021年河北统计年鉴数据整理资源-CSDN文库https://download.csdn.net/download/2401_845856…

创建和管理IPAM

IPAM(IP Address Manager)为用户提供全局地址管理的能力。创建IPAM后,您可以在IPAM中创建私网作用范围。每个私网作用范围都代表一个独立的地址作用域,在私网作用范围中可以创建地址池来管理和分配IP地址资源。本文为您介绍如何创…

esp32学习:语音识别教程esp-skainet库的使用

乐鑫推出了基于esp_sr算法的语音识别应用esp-skainet。官方介绍:ESP-Skainet 以最便捷的方式支持基于乐鑫的 ESP32系列 芯片的唤醒词识别和命令词识别应用程序的开发。使用 ESP-Skainet,您可以轻松构建唤醒词识别和命令词识别应用程序。 支持的主要功能…

模拟信号采集显示器+GPS同步信号发生器制作全过程(焊接、问题、代码、电路)

1、制作最小系统板 在制作最小系统板的时候,要用USB转TTL给板子供电,留了一个电源输入的四个接口,同时又用排针引出来VCC和GND用于后续其他外设的电源供应,电源配有电源指示灯和保护电容, 当时在焊接的时候把接口处的…

首席数据官和首席数据分析官

根据分析人士的预测,首席数据官(CDO)和首席数据分析官(CDAO)必须更有效地展示他们对企业和AI项目的价值,以保障其在高管层的地位。Gartner的最新报告指出,CDO和CDAO在AI时代需要重新塑造自身定位…

Java的访问修饰符

Java中有四种访问修饰符:public、protected、default和private。这些修饰符可以用来控制类、变量、方法和构造函数的访问范围。 public:被public修饰的类、变量、方法和构造函数可以被任意其他的类访问。protected:被protected修饰的类、变量…

Python毕业设计选题:基于Django+Vue的图书馆管理系统

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统首页 图书馆界面 图书信息界面 个人中心界面 后台登录界面 管理员功能界面 用户…

使用 OpenCV 进行图像的形态学操作

概述 在计算机视觉和图像处理领域,形态学操作是一种非常有用的工具,常用于图像处理和分析任务,如边缘检测、去噪、轮廓提取等。OpenCV 提供了丰富的 API 来支持这些操作。本文将详细介绍如何使用 OpenCV 库中的形态学操作来进行图像处理&…

Docker:namespace环境隔离 CGroup资源控制

Docker:namespace环境隔离 & CGroup资源控制 Docker虚拟机容器 namespace相关命令ddmkfsdfmountunshare 进程隔离文件隔离 CGroup相关命令pidstatstresscgroup控制 内存控制CPU控制 Docker 在开发中,经常会遇到环境问题,比如程序依赖某个…

RabbitMq-队列交换机绑定关系优化为枚举注册

📚目录 📚简介:🚀比较💨通常注册🌈优化后注册 ✍️代码💫自动注册的关键代码 📚简介: 该项目介绍,rabbitMq消息中间件,对队列的注册,交换机的注册&#xff0c…