来源:前端之巅 正文 作者 | 邓艳琴采访嘉宾 | 于佳、高飞
日前,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 组织实际上需要扩大范围,让更多头部的大厂入局。《创新者的窘境》里写到,先进的创新技术一般都是大公司优先孵化出来的,因为大公司有更多的资源了解行业最先进的技术,并率先投入尝试。我们希望这些投入尝试的大厂可以更多的开源与持续分享,将知识传播给更多的人,从而帮助技术逐步成熟。 嘉宾简介于佳,花名宗心,闲鱼技术团队客户端负责人。2012 年应届毕业加入阿里巴巴,经历集团无线化转型的重要时期,参与过集团多款重量级 App 以及移动中间件的设计与开发,多年客户端老兵。2014 年参与了手机淘宝的 iOS 客户端的架构升级,该架构首次完成了对百人团队并行开发的支持,同年主导了手机天猫客户端基础架构以及交易链路向手淘架构的归一,为手机淘宝作为未来集团无线中台奠定了坚实的基础。2015 年加入闲鱼客户端团队负责端架构和团队建设,工作期间完成了基于 Flutter 混合架构的闲鱼客户端的整体架构设计,在工程体系上完善了针对 Flutter 的持续集成以及高可用体系的支撑,同时推进了闲鱼主链路业务的 Flutter 化。未来将持续关注终端技术的演变及发展趋势。高飞,百度贴吧客户端技术负责人,资深研发工程师,全栈技术实践者,2011 年加入百度贴吧,一直服务于贴吧客户端,经历了移动技术发展的重要节点,研究技术主要有客户端工程建设、体验优化、动态化、IM、直播等,2018 年下半年负责探索 Flutter 技术在贴吧的落地。