Flutter 是否面临被逐渐淘汰的命运?

发表时间: 2021-03-24 09:15

作者 | 邓艳琴

采访嘉宾 | 于佳、高飞

日前,Flutter 2 的发布,给 Flutter 社区注入了新的活力。但在国内,其实围绕着 Flutter 还有着许多争议。有人在纠结 Flutter 是否值得长期投入,有人质疑 Flutter 的实际表现,有人甚至发出了“Flutter 是否正在被大厂放弃”的疑问。近日,InfoQ 采访了阿里巴巴闲鱼技术团队客户端负责人于佳(宗心)和百度贴吧客户端技术负责人高飞,针对以上问题,他们分享了自己的看法。

背景:从 Flutter 化到去 Flutter 化

Flutter 自诞生之日起,从来都稳坐风口浪尖,关注与争议一直伴随其身。近几年,诸多互联网大厂投入实践,先是有闲鱼团队大规模引入 Flutter,后有飞猪、百度贴吧、今日头条、西瓜视频、美团外卖、京东商城等团队在多个场景下落地了 Flutter 项目。

尝到了 Flutter 带来的甜头,但随着深入落地,Flutter 的性能问题为人诟病。如“大厂开始放弃 Flutter 了吗?”“某厂已经开始去 Flutter 化”等传闻更是甚嚣尘上。

Flutter 真的要凉了吗?未必,我们也看到了一些新的可能,比如美团让 Flutter 在鸿蒙系统上跑了起来,还有团队基于 Flutter 做了一些小程序容器相关的底层实现。

近日,我们邀请到两位亲身实践过 Flutter 的老师,针对现阶段 Flutter 面临的一些争议以及未来进行了讨论,一位是闲鱼技术团队客户端负责人于佳(宗心),他也是此次 GMTC 全球大前端技术大会(北京站)2021【Flutter 技术探索与实践】专题的出品人。另一位老师则是百度贴吧客户端技术负责人高飞,他推动了 Flutter 技术在贴吧的落地。

看点:Flutter 的争议

InfoQ:我们在看到一些比较比较消极的看法,他们认为 Flutter 正在被悄悄放弃,怎么看待这些声音?

宗心:Gartner 将每个技术成熟度曲线都将技术的生命周期划分为五个关键阶段。

  • 技术萌芽期:潜在的技术突破即将开始。早期的概念验证报道和媒体关注引发广泛宣传。通常不存在可用的产品,商业可行性未得到证明。
  • 期望膨胀期:早期宣传产生了许多成功案例 — 通常也伴随着多次失败。某些公司会采取行动,但大多数不会。
  • 泡沫破裂谷底期:随着实验和实施失败,人们的兴趣逐渐减弱。技术创造者被抛弃或失败。只有幸存的提供商改进产品,使早期采用者满意,投资才会继续。
  • 稳步爬升复苏期:有关该技术如何使企业受益的更多实例开始具体化,并获得更广泛的认识。技术提供商推出第二代和第三代产品。更多企业投资试验;保守的公司依然很谨慎。
  • 生产成熟期:主流采用开始激增。评估提供商生存能力的标准更加明确。该技术的广泛市场适用性和相关性明显得到回报。

基于这个理论,Flutter 应该处于期望膨胀和泡沫破裂之间,一方面看好的人还会继续大力宣传和投入解决问题,同时在尝试落地失败后的公司和个人会极力唱衰,因此我们应该回归本质去看,跨平台技术本身有其特定场景下存在的价值,多平台的研发效能收益是真实的公司需求,目前行业的龙头企业都仍然在持续投入和改进中,谈被放弃为之尚早。

InfoQ:我们收集了网络上关于 Flutter 的争议比较多的一些问题,对于这些问题,您怎么看?

  • 用 Flutter 是想节省成本,开发确实快,但实际上有一堆坑,比如你要在写插件和环境搭建上花费大量时间,成本变相回来了
  • 目前 Flutter 的落地都在边缘业务 / 页面,或者做个人项目很香,但企业级应用前景堪忧


  • 所谓原生级别的流畅,但实际很卡,体验差,而且有些跨端项目一开始用 Flutter,结果性能卡脖子,无奈又回到 Android 和 iOS 分开搞的局面
  • 嵌套之美,难以欣赏
  • Flutter 是 KPI 项目,负责人升职完了,华丽转身,留下一地烂摊子
  • ……

宗心: 对于效能和性能相关的问题适用于所有跨平台技术,跨平台技术本质是渲染引擎和逻辑的统一,无法做到不同平台特性的统一。另外,性能本身一定是一个 Tradeoff,就当前的性能来看,Flutter 不能算非常出色,在滚动,长列表等具体细节的感受上,确实不如原生流畅,但差异没有大到不能接受。 同时,对于正在更新迭代的技术来看,我们有信心在未来看到性能的进一步提高。

针对效能和性能我的看法是,随着生态的完善,进入门槛会进一步降低,插件生态也会相对丰富,一次性的成本会越来越少,在持续投入的过程中,效率会逐步产生质变。性能目前来看,随着版本的持续更新,一些问题和体验细节会由社区完善,目前 Flutter 的很多细节是没有浏览器内核做得好的,因此还有不少提升空间,但理论上来说浏览器能做到的,Flutter 也可以。

对于企业级应用堪忧这个看法,目前头部大厂的小前台应用大量使用 Flutter 进行业务落地,就阿里巴巴内部已有 30+App 使用了 Flutter 相关的技术,根据历史的规律,企业级应用一定会先在头部互联网企业产生,并逐步优化降低门槛,这个过程需要一些时间。闲鱼团队也在努力同社区一起加速这个过程中,我们今年会针对性地出版一本新书《Flutter 企业级应用开发实战》,届时也希望能在 GMTC 进行签售。

关于为了 KPI 强行使用新技术留下烂摊子这个事情,我有一些不同的看法。科技进步的本身需要不停的尝试,这个过程中一定会有一些人通过新技术去落地和实践,有人成功,有人失败,不论如何,新的视角和勇气是很重要的,因为新方案的落地总有质疑和反对的声音。技术进步是需要人的推动和不断完善的,尤其是努力过后结果并不顺利的同学,我们需要给这些同学更多的宽容。当然,只是为了一己私利对结果不负责的同学,大家也需要记住,我们的技术圈子很小,技术口碑是有记忆的,从博弈论的角度来看,长期来讲这些同学不会持续得到好的评价。

高飞: 我把以上问题归纳为了两类。

问题一:Flutter 作为一个新的跨端技术,不少开发人员以一向的好奇心,从陌生到熟悉,落地范围也越来越大,也享受到了给业务带来了实际的效率提升。实际使用中,会遇到一些不够平滑的地方,比如写插件和环境搭建,其本质都是一些外部依赖问题。主要有两类:

接口较多,工作量大。需要封装的能力较多,比如账号,日志,分享,语音识别,图片上传,推送,二维码等等。有些能力本身接口较多,以账号为例,有普通登录、微信登录、微博登录、QQ、各种运营商、刷脸、短信等 10 多种能力,在反作弊场景下也会复用这些能力,都需要插件封装;

依赖库冲突。依赖到的 Native 上的库版本不一致,依赖库源码有修改,库的托管方式也有不同,还有 Native 库双端接口不一致、功能不对齐等问题;

这些问题是客观存在的,因此需要统一建设来解决,业界分享过较多的容器化、基础能力接口标准化等思路,解决起来是个一次性的成本,实施过程中也能发现原有端上能力的设计问题或历史问题,解决后,使得整体架构更健康。环境搭建也是类似,不同团队的基础设施不一致,首先是一次性成本的事情,实施中也能同步思考并推动基础设施的统一。

问题二: 业界已有较多的企业级应用场景实践,不过 Flutter 作为一个新的技术栈,在企业级应用里面,会涉及研发模式的转变,基础建设的完善,对团队管理和基础建设都要求高一些,企业应对上,整体采用更为稳健的节奏也是合理的,也就是先从边缘页面或创新项目开始,逐步在扩大落地范围。比如基础建设来说,更多是一个工作量的问题,建设到一定成熟阶段,企业级应用会越来越多进行落地,而在次之前,是要进行基础建设和 Flutter 方向技术专家培养的,这类似一个量变到质变的过程。

疑问:Flutter,路在何方?

InfoQ:目前 Flutter 发展的阻力是什么?

宗心: 目前来看,整个开发者的进入门槛还是比较高。有几个典型的场景

  • 移动端常用的一些 SDK 缺乏对应的官方插件 ,对于 Native 习以为常的一些能力,如 Lottie,之前也没有,当然现在有了
  • 混合工程为主要研发方式的阶段,工程构建,混合栈依然还是有不少成本的,这部分我们近期在改造的 Flutter Boost 3.0(beta 中)或者未来 Flutter 2.0 的多 Engine 模式逐步完善后,该问题会被解决
  • 性能稳定性还有不少提升空间 ,长列表等典型场景的性能体验并不好,图片库的性能也不够好。

其他应该还有不少例子。本质来看,还是生态处于初级阶段,需要不停地完善迭代,同时需要更多的开发者进入。假以时日,这些问题都会被解决。

高飞: 个人觉得还是基于 Flutter 的完整研发体系的建设,而这是需要大量的工作量。需要补齐等同于 Native 研发的基础设施,比如通用端能力的插件封装、构建打包、质量体系、视觉 UI 的规范、模块化、动态化,以及引擎本身的稳定性和性能优化等。这些基础设施更注重的是产品化程度,要建设得通用且好用。

InfoQ:Flutter 的机会在哪里?鸿蒙是 Flutter 的机会吗?

宗心: 我比较喜欢拿老技术对比新技术,因为所有的新技术一定程度上都是已有技术的组合和优化的结果,我不认为 Flutter 会完全挑战原生开发的地位。我们去看下 QT 支持的业务场景,再回去看 Flutter 2.0 公布跟丰田的合作,还有跟各个操作系统的厂商做的一些优化,我相信未来 Flutter 机会就是在多设备多操作系统的场景下。因此鸿蒙 OS 如果面向手机和 IoT 设备成为主流的操作系统之一,那么这个场景下对 Flutter 来说会有一定的机会。

另外,行业内也有不少同学基于 Flutter 去做一些小程序容器相关的底层实现,这也是一种典型的使用场景。

高飞: 从现在和未来两个方面来说,当前来讲,Flutter 目前的跨移动双端,以及今年官方可能会推出其他端的正式版 SDK,让跨端提效有更为实质性的进步。其次,目前业界也有多种动态化方案,可以让已有 H5 跑到 Flutter 上,静态 Dart DSL 的动态化,小程序运行到 Flutter 上,方法级热修复等,都非常值得尝试并落地。未来,在数字化趋势下,Fuchsia 和鸿蒙等微内核系统,会有更多落地场景,也和 Flutter 的愿景一致,让开发者不论身处何处都可以在屏幕上绘制像素,建立舒适的体验。

InfoQ:现阶段的 Flutter 应该怎么增强开发者对它的信心,吸引更多开发者来加入,共建生态圈?你会给什么样的建议?

宗心: 我认为 Flutter 官方还是要面向企业级研发的要求,解决关键的一些体验问题,我们从 Flutter 近期的一些更新可以看到官方的一些诚意。我们最近也准备升级新版本进行一些内部的验证,看看比如 iOS 输入框等一些长期看得见的细节问题,是否有被解决。同时也会关注下比如长列表的性能是否有提升,对接 Metal 后 iOS 渲染性能会不会更好。

同时社区的这些同学需要跟 Flutter 官方一起降低开发者接入门槛,我在我们最新的 Flutter Boost 3.0 的代码 Review 里说过,我们必须基于客户端同学大概率只会 iOS/Android 一端的这个知识背景去设计我们的 API,这部分如果可能,API 需要一模一样。另外整个 API 要做精简,让开发者不要理解这么多概念,我想这个就是我们团队身体力行在坚持减少开发者门槛的行为,我们也会在这个方面持续优化。

另外,之前 Flutter 官方与国内大厂组织的 Flutter China 组织实际上需要扩大范围,让更多头部的大厂入局。《创新者的窘境》里写到,先进的创新技术一般都是大公司优先孵化出来的,因为大公司有更多的资源了解行业最先进的技术,并率先投入尝试。我们希望这些投入尝试的大厂可以更多的开源与持续分享,将知识传播给更多的人,从而帮助技术逐步成熟。