写点什么

弃坑 RN,入坑 Flutter,同程旅行架构师给了这四点理由

  • 2021-09-10
  • 本文字数:4026 字

    阅读完需:约 13 分钟

弃坑 RN,入坑 Flutter,同程旅行架构师给了这四点理由

作者 | 闫园园

采访嘉宾 | 同程旅行架构师李宁

 

随着移动互联网的普及和快速发展,Android 和 iOS 成为了移动端 coder 的舞台。而传统的纯原生开发已经不能满足日益增长的业务需求。于是,APP 跨平台开发成了现在比较热门的方向。跨平台开发成本低、周期短、易于上手、不用重新设计、省时省力,种种好处让开发者们备受青睐,也让诸多跨平台开发工具趁势崛起。

 

目前,Flutter 和 React Native 当属此领域的佼佼者。Facebook 在 2015 年推出了 React Native,它的目标是创建移动应用程序,而不会影响应用程序的外观和感觉。随后,谷歌在 2017 年推出了 Flutter,它的目标是解决移动开发中跨平台、高性能问题。

 

从这时起,新创业公司和企业就为他们选择其中哪个框架开发应用程序而陷入困境,这也推动了 Flutter vs React Native 的辩论。首先来说,笔者认为这两种框架并不存在谁要被 pk 掉的情况,毕竟这两种框架在特定的需求领域都能发挥很好的作用。换句话说,我们没必要对类似“谁是最好的语言”这种问题进行“党派之争”。

 

但不得不承认,这两年 Flutter 发展非常迅猛,得到了越来越多企业和 coder 的关注,为了能让对此技术感兴趣的同学们有更深入的了解,我们采访了来自 ArchSummit 全球架构师峰会的讲师——同程旅行架构师李宁,由他来结合项目中的实际情况跟大家聊聊 Flutter 究竟有哪些优势又面临哪些问题,此外他将在ArchSummit全球架构师峰会中带来主题为《同程旅行 Flutter 的应用实践》的演讲,感兴趣的同学们也可多多关注。

崛起的跨平台技术

 

InfoQ:首先请您介绍一下跨平台技术的由来?

 

互联网很多公司发展需要不断的快速试错,安卓和 iOS 市场占有率高,已经坐稳了移动开发的两大阵营。

 

如何保证跨平台技术可以保证跨端的一致性、减少多端开发投入、提升开发效率,是所有开发者在不断探索和共同努力的方向,很多跨平台框架如 Hybrid、React Native、Weex、Flutter 等跨平台技术也由此应运而生。

 

InfoQ:时至今日,已经有了很多跨平台框架,请您介绍一下目前比较流行的移动 APP 开发框架有哪些?它们又各有什么适用范围?

 

目前比较流行的移动 APP 开发框架有:Hybrid、React Native、Weex、Flutter。

 

Hybrid:可动态更新的页面,社区资源相对丰富,性能较差,对复杂用户界面支持不友好。适用范围:多应用于相对简单用户界面,可动态更新页面;

 

React Native:对 IOS/安卓开发有一定认知,依赖 native 相关组件实现,有大量适配工作,支持热更。体验高于 Hybrid,可热更新。适用范围:更适合对原生开发有相关经验的开发者使用来开发,可实现相对复杂的界面;

 

Weex:与 React Native 实现方式相似,依赖 Natvie 相关组件实现,封装 Native 组件工作量大,体验方面等同于 React Native,需要掌握 Vue 相关知识体系。适用范围:理论上等同于 React Native;

 

Flutter:目前为止最接近原生的跨平台框架,自绘引擎,性能强大,流畅度高,易上手。需要具备原生开发能力,对 App 包大小影响较大。无法热更新。适用范围:自绘引擎性能强大,体验接近原生,开发易上手,可支持丰富的动画。可做较复杂动画和页面的开发。

同程旅行 Flutter 实战

 

InfoQ:Flutter 和 QT mobile 一样,实现了一个自绘引擎。但在近几年,QT 的声音一直很弱,您认为 Flutter 会不会步入 QT mobile 后尘呢?

 

我认为不会的。

 

首先,Flutter 官方推广力度比较大,版本更新频次较高,虽然都是使用自绘引擎,但是 Flutter 对前端开发更友好,性能强大,上手简单而 QT mobile 上手难。

 

其次 QT mobile 社区生态推广力度小,受众也小,且 C++相对 Dart 开发效率低下,这也是造成 QT mobile 逐渐被遗忘的原因。

 

InfoQ:请您展开说说相比于 React Native 框架,Flutter 的优势是什么?

 

第一,JIT 模式下,编译速度与 JavaScript 基本持平,但是对于 AOT 模式下,Dart 效率远高于 JavaScript,JavaScript 则不具备 AOT 这个能力;

 

第二,Flutter 使用的是自绘引擎,对 UI 的操作,布局的修改执行效率要比 React Native 效率高很多,React Native 基于 dom 树绘制修改原生组件,性能的瓶颈也在于此;

 

第三,Dart 支持静态监测,可以在编译前发现很多编译问题,排除潜在问题(天生具备)而 React Native 则需要添加相关插件来做检测;

 

第四点,Flutter 可支持较复杂的动画,流畅度方面表现高于 React Native。

 

InfoQ:您和团队是基于怎样的考虑,选择 Flutter 开发成为团队的主要技术呢?

 

关于这一点我们是这样考虑的,第一,Flutter JIT 编译模式可以极大地提升开发效率,原生开发前所未有的体会到了开发的便捷;

 

第二,Flutter 可以严格保证跨端的一致性,AOT 模式下的高性能保证了体验流畅度,开发易上手、学习成本低,解决了我们提升开发效率和降低开发成本的诉求。

 

InfoQ:开发者经常会这样评论:Flutter 目前最大的优势在于使用 Dart,最大的劣势也在于使用 Dart,对这句话您有何见解呢?

 

对于优势之前问题的回答已经很全面了,这里就不在赘述,这个问题我主要来聊聊关于 Dart 的几点劣势:

 

第一,不支持反射,无法在运行时动态修改类的行为;

 

第二,线上发布代码,无法热更新;

 

第三,Dart 相关社区目前还不是很完善,有待大家共同完善社区;

 

第四,相关开发工具支持的力度还不是很成熟;

 

第五,刚上手的开发者需要避免地狱嵌套这种模式,需要多注意控件的状态管理。

 

第六,Dart 的空安全,在升级版本的时候,需要重新适配,比较头大。

 

以上都算是 Flutter 上面的小瑕疵,但瑕不掩瑜,我相信使用 Dart 的开发者会越来越觉得 Dart 用起来“真香”。

 

InfoQ:Flutter 框架有其自身的优越性,然而事物都有两面性,您能结合实践说一下目前发现的挑战有哪些吗?

 

第一,Flutter 上线之后,业务发现异常。对于严重影响主流程的 case,只能通过发版来修复相关场景问题,无法做到及时止损,这样业务也会受损。

 

对此,我们调研了一番,在一开始版本 Flutter 有支持热修复相关场景,后考虑到苹果审核或者 Google 自身官方审核不允许动态更新的机制,阉割了该功能,多么痛的领悟。

 

后来,我们又对比了业界目前动态化方案,都是曲线救国,并不能从根本上处理问题,先透露下我们的方向,开启 Flutter JIT 模式来实现热修复,不过 JIT 模式下性能还是有损的,鱼和熊掌不能兼得。目前处于测试阶段,方案待同步给大家;

 

第二,线上指标和本地调试性能的差异。目前 Flutter 提供了本地测试相关性能的工具,不过和线上指标相比还是有差异的。

 

上线指标是我们关注的重点,用户不同机型,跑我们页面的性能需要指标量化,这就需要我们对线上相关指标监控起来,包括异常数据 、页面流畅度、cpu 使用率、首屏时间等都是需要量化和监控起来的。

 

有了指标,后面就是针对性的优化了,持续优化是我们不断进步的方向;

 

第三,切换版本。Flutter 升级迭代,都会发现相关需要适配的 API,以及需要兼容性的事情。

 

之前升级 1.9.1-1.22.6(跨动比较大),除了应用层面 API 需要适配,一些底层渲染 API 也给删除了,没有相关方法,只能通过应用层面来适配,解决升级版本兼容性的问题(修改引擎层改动量大,版本升级适配工作量多);

 

第四,自动化集成。目前同程旅行 App 使用的是混合开发模式,Native 开发无感知集成到 App 中,目前分为上线集成模式和开发调试模式,分别用来集成 debug 产物和 release 产物,都以 Native 组件的方式集成进来。

 

InfoQ:针对以上您发现的挑战,就其中一点说说您和团队的解决方案?

 

上个问题已经为大家解答了一下,这里我再做一些补充。

 

虽然 Flutter 提供了相关监测工具,但是基于 release 模式上线相关性能指标是无法真实监测到的,所以同程旅行为了及时监控到相关线上指标,自研了相关性能监控组件,量化了线上相关性能指标并进行了及时的治理工作。

 

监控项主要分为以下几点:页面异常信息、FPS 监控、Crash。总的来说,监控性能以及相关指标的优化任重道远。

Flutter 之前景探索

 

InfoQ:在 Flutter 1.0 发布会上,Flutter 产品经理介绍了如何让 Flutter 运行在 Web 之上。那么经过发展目前 Flutter for Web 的现状是什么?

 

关于 Flutter for Web 的现状,我认为虽然 Flutter2 已经正式支持稳定版本的 web 应用发布,但是包的大小、启动速度、FPS 等性能方面还不太令人满意,而且目前混合开发模式部署到 web 兼容适配问题还没有一个很好的适配方案。

 

但是在我看来随着时间推移和社区的完善,这些问题肯定可以得到很好的解决。

 

InfoQ:您认为 Flutter 的未来趋势如何呢?

 

针对这个问题,基于上面的回答我先给大家总结几点优势:

 

第一,Flutter 使用 Dart 语言进行开发,Dart 可快速上手,简单易学,越来越受开发者的追捧;

 

第二,Flutter 性能表现和流畅的体验方面的优越性已经是当下跨平台不可逾越的;

 

第三,随着越来越多的开发者加入到 Flutter 开发阵营和社区的生态的完善,开发者遇到的问题可得到越来越快速的解决;

 

第四,Google 大力推广 Flutter,从频繁的版本发布我们可以看出 Google 对待 Flutter 推广的态度,特别基于目前国内混合开发声音越来越高,Flutter 对混合开发也是越来越重视,不断的进行性能优化和底层能力升级。

 

因此,综合以上的几点优势我认为随着社区的完善和官方的大力推广 Flutter 在未来跨平台领域的市场占有率会越来越高,发展也会越来越好。

采访嘉宾介绍

 

李宁,同程旅行架构师,2016 年加入同程旅行,目前在研发中心的基础架构部门负责 iOS 端相关架构设计工作,包括持续集成工具链、组件化、跨平台等设计和开发,尤其在推动业务落地方面有丰富的实战经验,主导设计的 Flutter 混合框架已成为公司推动的主流跨平台解决方案,各项技术指标达到业内领先,已经受过相当规模的业务落地检验。在 App 架构设计方向有丰富的理论和实战经验,曾就职于金山、宜信等公司,主导了公司组件化,跨平台框架的相关设计并推演落地。

 

李宁老师将在 11 月 12 日-13 日的 ArchSummit 全球架构师峰会中分享议题“同程旅行 Flutter 的应用实践”,针对如何通过技术手段,快速发现线上的异常,卡顿,Crash 以及如何量化线上性能指标等问题,分享实践过程中的相关解决方案,希望能为大家提供新的思路或者启发,点击了解详情。

2021-09-10 16:2010850

评论 10 条评论

发布
用户头像
感觉评价好多水军啊,这文章是真的水
2021-10-08 13:29
回复
用户头像
所以之前rn到底有啥问题?之前的基建抛弃了么?
2021-09-26 18:23
回复
用户头像
这篇文章是过时了吗?我记得weex已经很久没更新了
2021-09-22 14:29
回复
用户头像
大佬牛逼~
2021-09-10 21:16
回复
用户头像
向大佬学习
2021-09-10 20:11
回复
用户头像
👍🏻👍🏻👍🏻 期待后续更多分享
2021-09-10 19:05
回复
用户头像
讲的不错,学到很多,大神牛逼
2021-09-10 17:44
回复
用户头像
学到了!
2021-09-10 17:18
回复
用户头像
宁神出品,必属精品,期待更多分享
2021-09-10 17:17
回复
用户头像
膜拜大神,说的通俗易懂
2021-09-10 17:09
回复
没有更多了
发现更多内容

Downie 4 v4.7.24最新中文版下载 永久使用 支持M1.M2.M3芯片安装

Rose

Downie 4许可证 Mac视频下载器 Downie 4下载 Downie 4使用教程

Mac远程连接软件 microsoft remote desktop苹果汉化版

理理

远程桌面连接 microsoft remote desktop 微软远程软件mac版

豆包,大模型的磁力三重奏

脑极体

AI

GraphPad Prism科技绘图与数据分析

Rose

GraphPad Prism破解版 科学绘图和统计分析 GraphPad Prism下载

哪里有Parallels Desktop 19永久密钥?Parallels19虚拟机破解版安装附激活秘钥

理理

Parallels Desktop 19 Parallels虚拟机下载 macOS虚拟机 PD19安装教程

flowjo 10 for mac流式细胞分析 详细安装破解教程 支持m1/m2/intel

Rose

流式细胞分析软件 FlowJo 10破解版 FlowJo Mac版 FlowJo 安装教程

如何定量分析 Llama 3,大模型系统工程师视角的 Transformer 架构

百度Geek说

大模型 Llama3

AE2020 mac破解版资源 After Effects 2020中文版下载安装

理理

视频特效 AE2020 中文版 AE2020破解版 After Effects 2020

Microsoft Office LTSC for Mac/win 2021永久使用版

理理

IntelliJ IDEA 2019 mac破解版 含IDEA 2019永久密钥 附IDEA 2019中文版设置教程

Rose

IntelliJ IDEA 2019 IntelliJ IDEA 2019密钥 编程软件 IDEA 2019

在元宇宙与实体办公室之间,您更倾向于哪一种工作方式?

dappweb

品牌与分类:解析京东商品详情API中的品牌与分类信息

技术冰糖葫芦

API 安全 API 文档 API 测试 API 优先

XMind破解版下载,xmind 2023 思维导图for mac 兼容m1/m2

理理

Mac XMind 2024破解版 XMind思维导图下载

macOS 12 Monterey (苹果mac12系统)v12.7.2正式版

理理

苹果系统下载 macOS 12 Monterey

链路级资损防控之资损字段防控实践|得物技术

得物技术

最佳实践 测试 资损防控 企业号2024年7月PK榜

什么情况下你能接受 996

王中阳Go

Go 工作 面经

IPQ9574 vs. IPQ6010 in Smart Manufacturing: Which Chipset Leads the Way?

wallyslilly

ipq9554 ipq9574

科学文献管理软件EndNote 21功能介绍 含(EndNote 21激活码)

Rose

文献管理工具 EndNote 21下载 EndNote 21破解版 EndNote 21授权码

Microsoft PowerPoint 2019 for Mac永久使用版 支持Inte.m1.m2.m3安装

Rose

PowerPoint 2019 ppt2019下载 PowerPoint 2019 破解

视角 | 麻省理工学院提出出温度计校准法,专治AI大模型过度自信

硅纪元

使用京东API接口适用于的环境及验证调用合法性的方法

Noah

Cornerstone for Mac(最好用的SVN管理工具)v4.2永久激活版

理理

Mac 软件 SVN客户端 cornerstone 4 破解版 Cornerstone4永久版

喜加一!望繁信科技再摘「2023年度新锐技术品牌奖」

望繁信科技

流程挖掘 流程资产 流程智能 数字北极星 望繁信科技

ChemDraw可以绘制哪些物质?ChemDraw破解补丁版下载安装 Mac/win

Rose

ChemDraw破解版 ChemDraw化学绘图 ChemDraw下载安装

最高可管理 10K 实例的 InstanceSet 是什么?

小猿姐

数据库 Kubernetes 云原生

PDF解析,还能做得更好

合合技术团队

PDF 大模型 文档解析

VMware Fusion Pro 12破解版 v12.2.5 mac vm虚拟机永久密钥

理理

VMware Fusion虚拟机 VM虚拟机破解版 VMware Fusion激活秘钥 VMware Fusion Pro 12

windows11系统,Win11,windows11下载,ARM版Win11镜像

理理

Windows11 Windows系统下载 ARM版Win11镜像 Windows系统安装

LED异型显示屏:创新设计与市场需求的完美融合

Dylan

设计 应用 LED LED显示屏 市场

如何在苹果mac电脑畅玩原神游戏?playcover for mac你一定不要错过了

理理

原神 Mac软件 playcover iOS软件

Magnet for mac v2.12.0中文免激活版 支持多种不同方式的窗口布局模式

Rose

Magnet破解版 Magnet Mac下载 苹果电脑分屏软件 macOS窗口管理

弃坑 RN,入坑 Flutter,同程旅行架构师给了这四点理由_架构_闫园园_InfoQ精选文章