news 2026/9/30 5:57:37

RN与Flutter架构区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RN与Flutter架构区别

如果从架构原理来看,RN(React Native)和 Flutter 最大的区别可以概括成一句话:

RN:JavaScript/TypeScript 驱动原生 UI;Flutter:Dart 驱动自己的渲染引擎。

1. 整体架构对比

React Native ┌──────────────────────────────┐ │ React / JS / TS │ │ Component / Hooks / State │ └──────────────┬───────────────┘ │ JS ↔ Native 通信 (现代 RN: JSI) │ ┌──────────────▼───────────────┐ │ React Native Runtime │ │ Fabric / TurboModules / JSI │ └──────────────┬───────────────┘ │ Native Components │ ┌───────┴───────┐ │ │ iOS UIKit Android View
Flutter ┌──────────────────────────────┐ │ Dart App │ │ Widget / State / Business │ └──────────────┬───────────────┘ │ Flutter Framework │ ┌──────────────▼───────────────┐ │ Flutter Engine │ │ Dart Runtime + Skia/Impeller │ └──────────────┬───────────────┘ │ GPU / Surface │ ┌──────┴──────┐ │ │ iOS Android

2. 最核心的架构区别

维度React NativeFlutter
开发语言JS / TSDart
UI 来源原生控件Flutter 自己绘制
渲染React → RN → Native UIWidget → Engine → GPU
JS/Dart 与 Native 通信JSI / TurboModules 等Platform Channels / FFI 等
UI 抽象React ComponentWidget
平台差异比较明显Flutter 层统一
原生能力直接使用 Native 生态较方便需要 Plugin / Platform Channel
UI 一致性依赖 iOS/Android 原生实现跨平台一致性较强
包体积通常较小通常相对较大
性能模型JS 逻辑 + Native UIDart + 自有渲染引擎

3. RN 的核心:JS 驱动 Native

早期 RN 经常被描述成:

JS │ │ Bridge ▼ Native │ ▼ UIView / Android View

例如:

<View> <Text>Hello</Text> <Button title="OK" /> </View>

最终并不是 RN 自己画一个 Button,而是由 RN 的架构映射到平台对应的 Native View。

现代 RN 已经发生了比较大的变化:

React ↓ Fabric ↓ JSI ↓ C++ / Native ↓ UIKit / Android

所以现在讨论 RN 架构时,最好不要再简单理解成:

JS → JSON Bridge → Native

更准确的是:

React + JS/TS Runtime + JSI + Fabric + TurboModules + Native Platform


4. Flutter 的核心:自己画 UI

Flutter 的思路完全不同。

你写:

Container( child: Text("Hello"), )

Flutter 并不是把Container转换成:

UIView Android View

而是:

Widget ↓ Element ↓ RenderObject ↓ Flutter Engine ↓ Impeller ↓ GPU

也就是说:

Flutter 的 Button、Text、List、ScrollView 等大量 UI 都是 Flutter 自己实现的。

所以 Flutter 能做到:

同一份 Widget ↓ ┌─────┴─────┐ iOS Android └─────┬─────┘ ↓ Flutter Engine ↓ GPU

这也是 Flutter 跨平台 UI 一致性比较强的根本原因。


5. 两者最大的架构差异:谁负责渲染?

这是面试里非常值得讲的一点。

RN

React Component ↓ React Native ↓ Native Component ↓ UIKit / Android View ↓ 系统渲染

所以 RN 更接近:

跨平台 React 层 + 原生 UI。

Flutter

Flutter Widget ↓ RenderObject ↓ Flutter Engine ↓ Impeller ↓ GPU

所以 Flutter 更接近:

跨平台 UI 框架 + 自己的渲染体系。


6. 这会直接影响性能

假设有一个复杂列表:

1000 个 Cell ↓ 大量布局 ↓ 大量滚动 ↓ 动画

RN:

JS/React ↓ RN ↓ Native View ↓ iOS / Android rendering

Flutter:

Dart ↓ Flutter Framework ↓ Engine ↓ GPU

因此两者的性能瓶颈也不完全一样。

RN 常见瓶颈

JS 线程 ↓ JS 执行 / React 更新 ↓ JSI / Native ↓ Native UI

特别是:

  • JS 计算太重

  • 大量 React 重渲染

  • JS 与 Native 高频交互

  • 大型列表

  • 复杂动画

Flutter 常见瓶颈

更多会出现在:

  • Dart 逻辑

  • Widget rebuild

  • Layout

  • Paint

  • GPU 渲染

  • 图片/Shader

  • 大量 Widget


7. RN 为什么更容易接入原生生态?

因为 RN 的设计本身就非常接近:

React + Native

例如你已经有:

iOS SDK Android SDK

可以通过 Native Module 暴露给 JS:

JS/TS ↓ TurboModule ↓ Swift / Objective-C Kotlin / Java

所以如果一个公司已经拥有大量:

  • iOS Native 代码

  • Android Native 代码

  • 原生 SDK

  • 原生组件

RN 往往比较容易融入现有技术体系。


8. Flutter 的 Native 通信

Flutter 通常是:

Dart ↓ MethodChannel ↓ Swift / Kotlin

例如:

Flutter │ │ MethodChannel ▼ Android Kotlin │ ▼ Native SDK

或者:

Flutter │ │ Platform Channel ▼ iOS Swift

当然 Flutter 也可以通过:

FFI

直接调用 C/C++ 等 Native 能力。


9. 架构思想上的区别

可以把它们理解成两种路线:

RN:复用 Native

React │ React Native │ ┌──────────┴──────────┐ ▼ ▼ iOS Native Android Native │ │ UIKit View

重点是:

尽可能利用已有的 Native 平台。


Flutter:抽象 Native

Flutter │ Flutter Widget │ Flutter Engine │ GPU ┌─────────┴─────────┐ ▼ ▼ iOS Android

重点是:

尽可能把 UI 和渲染从 Native 平台抽离出来。


10. 如果从“大型 App 架构”来看

这时候两者差异就更有意思了。

RN 通常是:

App │ ┌─────────┴─────────┐ │ │ Native Layer RN Layer │ │ iOS / Android React / TS │ │ Native SDK JS Business

所以很适合:

Native 主体 + RN 页面/业务模块

例如一个大型 App:

原生 App Shell │ ├── 首页 —— RN ├── 商品 —— RN ├── 订单 —— RN ├── 支付 —— Native ├── 相机 —— Native └── 地图 —— Native

Flutter 更容易形成:

Flutter App │ ├── UI ├── State ├── Business ├── Network └── Navigation │ ↓ Platform Channel │ ┌─────┴─────┐ iOS Android

也就是:

Flutter 更倾向于整个 App 使用 Flutter 架构。


11. 一个非常好记的总结

如果你正在准备RN / Flutter 面试,可以直接记这张图:

跨平台方案 │ ┌─────────┴─────────┐ │ │ RN Flutter │ │ React / TS Dart │ │ Fabric Widget │ │ JSI Flutter Engine │ │ Native Components Impeller │ │ UIKit / Android GPU

一句话:

RN 的核心是“JavaScript/React 驱动 Native UI”,Flutter 的核心是“Dart/Widget 驱动自己的渲染引擎”。

如果进一步往源码和底层架构深入,最值得比较的是RN 的 Fabric + JSI + TurboModules和Flutter 的 Widget → Element → RenderObject → Engine → Impeller,这部分也是两者真正拉开架构差异的地方。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 5:57:35

JQuick-Excel 首次导入:从 Sheet1 表头获得 JQuickRow

JQuick-Excel 首次导入&#xff1a;从 Sheet1 表头获得 JQuickRow tags: #JQuickExcel #JavaExcel #开源 #POI #Excel工具 简介 我是 JQuick-Excel 的作者。本文聚焦第一次导入&#xff0c;严格采用测试资源中的 Sheet1、学号、姓名、性别、年龄、出生日期字段&#xff0c;以及…

作者头像 李华
网站建设 2026/9/30 5:56:26

摄像头时好时坏怎么办?从系统排查到OpenCV与腾讯会议专项修复

摄像头这玩意儿&#xff0c;平时用不上时你觉得它就是个摆设&#xff0c;一旦开会、面试、上网课或者给家里老人视频时它掉链子&#xff0c;整个人能急出一身汗。尤其是那种“一会好使一会不好使”的毛病&#xff0c;看起来像玄学&#xff0c;其实背后几乎都有明确的技术原因。…

作者头像 李华
网站建设 2026/9/30 5:55:48

卷积神经网络改进实战:损失函数与小波散射在图像检索中的应用

简介&#xff1a;这份PDF面向深度学习入门与进阶研究者&#xff0c;聚焦卷积神经网络的理论改进与图像检索应用。内容系统梳理了CNN的结构、训练流程及LeNet-5等经典模型&#xff0c;并针对传统损失函数的局限&#xff0c;引入Triplet Network正则约束&#xff0c;提出改进算法…

作者头像 李华
网站建设 2026/9/30 5:55:14

医疗影像AI实战:DeepSeek本地化部署与DICOM微调全流程

简介&#xff1a;这份PDF教程面向医疗影像处理方向的开发者、算法工程师与医学信息学研究者&#xff0c;聚焦DeepSeek本地化部署与DICOM文件分析模型微调两大核心环节&#xff0c;帮助读者在保障数据安全的前提下搭建可定制的医学影像分析流程。资源包共1个PDF文件&#xff0c;…

作者头像 李华
网站建设 2026/9/30 5:55:12

Python如何成为AI落地的神经末梢

1. 这不是“学Python”或“学AI”的问题&#xff0c;而是理解两者如何真正咬合在一起很多人点开“Python与人工智能的理解”这个标题时&#xff0c;心里想的是&#xff1a;是不是又要看一遍“Python是AI的首选语言”这种车轱辘话&#xff1f;是不是又要背诵“TensorFlow、PyTor…

作者头像 李华
网站建设 2026/9/30 5:54:34

DeepSeek+GPU集群:基层CT影像辅助诊断模型训练实战

简介&#xff1a;这份PDF文档面向基层医院影像科医生、医疗AI方向的研究者与工程技术人员&#xff0c;围绕DeepSeek模型与GPU集群部署&#xff0c;讲解如何构建CT影像辅助诊断模型的完整训练流程。内容从医疗影像分析现状与基层医院痛点切入&#xff0c;依次覆盖DeepSeek技术原…

作者头像 李华