闲鱼有电脑客户端吗(闲鱼正在悄悄放弃 Flutter 吗?)

采访者|于佳(宗欣)

编辑|蒂娜

闲鱼在2017年推出了Flutter,当时Flutter还远未成熟,业内也没有将Flutter放入现有工程系统进行开发的先例。

之后,这个不足15人的闲鱼团队在工程架构、混合栈调用、封装构造、协作模式等方面做了一些创新,保证了Flutter可以集成到闲鱼现有的客户端工程系统中。2017-2019年期间,闲鱼也不断修复bug,提高Flutter的稳定性,并同步到Google。在实践中沉淀了一套自己的混动技术方案,并开放了颤振增压发动机。

2019年,闲鱼开始大规模落地,推动了Flutter在闲鱼的应用。2020年,闲鱼线主要环节几乎已经完全拥抱了Flutter。这两年,Flutter逐渐在其他企业落地,但同时也不断有质疑的声音。甚至有传言称“闲鱼新业务已经放弃飘起”“相信闲鱼遇到了很大的问题”......

那么,作为Flutter的开创者和探路者,闲鱼在过去几年的摸索过程中是否走了弯路?闲鱼现在面临着怎样的挑战?你会放弃颤振吗?新业务选择了什么技术?相应的技术选择原则是什么?针对这些问题,闲鱼科技团队客户端负责人于佳(宗欣)给我们一一解答。

国内首个引入Flutter的团队

InfoQ:当时闲鱼引入Flutter的主要目的是什么?

于佳(宗信):闲鱼17年研究期间,客户团队不到15人,闲鱼的业务场景可以称之为“小淘宝”,相对复杂。在这种场景下,我们首先需要解决的就是多终端人力共享的问题。多终端人力的好处不仅是一个人可以开发两个终端,而且R&D资源分配灵活性更好(这意味着团队中iOS: Android的比例不再需要1:1,市场上Android的工程师基数比iOS大很多)。

另外,我们希望这项技术适用于移动R&D技术栈,而不是前端技术栈。对于RN和Weex来说,工具链和R&D习惯还是有很大区别的。最后,我们希望这项技术的体验能够接近原生。AOT下的旋舞基本上满足了我们当时的要求。在实际测试过程中,Flutter在低端电脑上的表现要优于未深度优化的详情页上的Native。因此,颤振是根据这三个条件选择的。

2018年试投期间,整个基建和勘探带来了一定的成本。2019年,团队开始正式使用Flutter进行研发。目前整个团队70%的commit来自Dart,基本实现了我们当初的预期。在实际的R&D过程中,我们基本上可以实现要求一个客户投资的目标。

InfoQ:很多人质疑Dart语言,认为它是独特的、小众的,存在一些多层嵌套等问题。你对新语言的应用有什么看法?

于佳(宗欣):语言是我们选择技术方案的因素之一,但却是一个相对较弱的因素。

我们将从几个角度来看:

  • 语言背景,从我们的角度来看,Dart是大厂开发的,历史悠久。
  • 语言学习的成本,从语法糖和学习曲线来看,Dart成本相对较低。首先,安卓学生上手快。此外,熟悉swift的iOS学生上手也很快。现代语言有许多共同的特征。这是它的部分优势。
  • 该语言带来的其他优势,如对编译产品的AOT和JIT支持,是灵活的。AOT有明显的性能优势。
  • 语言的未来趋势。2020年第四季度,Dart在Github Pull Request中排名第13,超过了Kotlin(第15)、Swift(第16)和Objective-C(第18)。作为移动技术领域的新语言,成长性还是很不错的。
  • 像多层嵌套这样的问题,可以通过进一步抽象一些控件类或者方法来解决,不是特别大的问题。

    InfoQ:闲鱼引入Flutter后有哪些关键创新?使用Flutter有什么好处?

    于佳(宗信):闲鱼在这部分做了很多创新,内部申请了很多专利。

  • 我们的开源项目Flutter Boost完全改变了一些官方的Flutter路线图。目前业界最主流的研发方式是Add2ExistApp。混合开发一方面帮助业务更平滑地迁移到新的技术栈,另一方面可以更好地利用现有的原生能力,大大减少重复开发工作。
  • 音视频的外部纹理方案也是目前行业内各大厂商常用的解决方案。在外部纹理方案下,统一了原生端和颤振端的缓存管理,性能也有一定程度的提升。
  • 基于Flutter technology stack的性能稳定性数据收集和处理方案,Flutter APM目前与集团内的几个BUs共同构建,为大型AliFlutter组织提供服务。
  • 与Flutter相关的动态模板方案Flutter DX,兼容集团现有的原生模板,保证了业务的平滑迁移,并为Flutter提供了一些业务动态。
  • 还有很多其他的,包括内部的高性能长列表容器PowerScrollView,动画框架Fish-Lottie,游戏引擎Candy。目前我们在沉淀方面还有一些新的方向,也投入了基于Flutter的研发流程和工具。以后有兴趣可以去InfoQ组织的行业会议和我们交流。
  • 有没有想过放弃Flutter?

    InfoQ:最近一两年,你在开发Flutter时遇到的最大挑战是什么?这和你第一次使用Flutter时的挑战一样吗?

    于佳(宗信):早年作为整个行业的开创者,主要挑战是整个技术生态太差,都需要自己做。另外早期发动机的稳定性也有很大问题。

    近年来,随着整个技术的深入运用,以及近两年闲鱼业务的快速发展,越来越多的体验问题被大家提及。所以从去年开始,我们对整个产品进行了一次大改版,客户端的目标是全面优化,为客户端创造更好的产品体验。

    所以,在生态逐渐完善之后,我们面临的挑战是如何通过Flutter 实现更精细化的用户体验。去年这部分真的花了我们很多精力。基于这个命题,我们在内存和卡顿方面也开发了更多基于颤振的检测工具,在内存优化和卡顿优化方面也有一些具体的方法。但是不得不说,所有的细节优化都是耗费人力的,Native和Flutter都要投入相当大的精力,所以目前在面向全行业招募客户,希望有兴趣探索Flutter的同学可以联系我。

    InfoQ:在混合动力R&D系统下,闲鱼也做了引擎定制,那么官方方案的主要问题是什么?对于普通小企业来说,混合开发的复杂度会不会太高?

    于佳(宗信):闲鱼前期有很多改装引擎的动作。我反思了自己当时的一些。一方面真的是因为Flutter不完美。另一方面,在18年左右的时间里,对我们自己的发动机的了解还不够深入。很多时候可以通过更高层的方案来解决,这也是

    所以这部分我想说的是,目前官方的方案可以解决90%的问题。如果一定要说定制的话,性能方面还是有些问题的。比如目前闲鱼的首页还是没有用原生的Flutter,只是因为更换后启动加载的体验太差。另外,我们已经尝试通过上层框架解决了一部分在长列表端被大家诟病的卡顿问题,接下来可能还需要底层引擎帮助优化。另外还有一些问题,包括两端字体不一致,输入框体验不一致,需要政府长期优化。

    目前主要希望按照主分支走,尽量不要修改Flutter的代码。闲鱼团队会在引擎端储备一些专家,同时会依托团AliFlutter的生态来做事。在支付宝的整个组织中,不同的总线在这一点上也是不同的。比如UC同学更擅长引擎定制,闲鱼团队有大量上层应用框架,淘宝团队提供基于搭建的相关基础设施。这样大部分问题都可以通过大公司内部开源社区解决,可以放心开发。

    对于中小企业来说,要搞清楚大家面临的情况。如果早期迭代运行得很快,可能会在细节上做出部分妥协。选择颤振是一条相对清晰的路径。今天的环境比闲鱼的环境完美多了。对于混合动力开发,建议使用颤振助推。在某些场景下,当问题无法快速响应时,还可以使用native进行混合工程。在复杂度方面,单纯引入混合栈能力,整体复杂度一般。

    InfoQ:有传言说闲鱼在新业务中不使用Flutter,这让很多人产生了闲鱼放弃Flutter的想法。那么,你在新业务的技术选择上考虑了哪些因素呢?

    于佳(宗欣):作为技术决策者,要避免被某项技术绑架,在落地过程中出现失误。与其他技术一样,Flutter最终旨在帮助团队实现商业价值。同时,它只是移动端的一种技术,不宜杀熟和滥用。这也是我特别不想在公开场合回应这件事的原因,因为技术本身取决于适用的场景。

    目前按照闲鱼的人员规模和业务规模。对于建筑设计,我的理念是尽可能追求建筑的一致性和简洁性。

    整个客户机构的未来在语言方面是Dart First,以尽量减少双方的R&D投资。对于其他集装箱,H5是主要选择。以后尽量减少其他容器的接入,让前端开发回归标准路线。

    闲鱼有电脑版吗

    这里有两个优点:

  • 组织成本最低,包括学生的学习成本,协作成本等等。更多的技术栈和更多的容器会带来额外的成本,这是我不愿意看到的。
  • 架构的一致性有助于R&D的效率和质量。例如,随着业务复杂度的增加,多容器导致的内存飙升和数据包大小的问题是非常致命的,几乎是无法解决的,这就需要架构师做出决定,杀死什么,留下什么。回到R&D的效率,支持工具和流程必须围绕一类容器和语言进行扩展。如果方案多,各个方向都需要额外的配套设施,所以成本效益很低,R&D的幸福感也很低。
  • 从设计的角度来看,我们将有几个明确的选择:

  • 使用Flutter作为默认场景中的首选方案;
  • 在发布活动、前台导购、非常不确定的新业务和管理背景中,H5被用作首选实施方案。
  • 在罕见的场景下,比如现有的完整SDK有UI支持,比如直播,而中台未来的拍摄功能SDK也是有UI的部分。如果要切换的话,原生的成本最低,所以选择原生。目前Flutter在首页加载的时候还是有一些性能问题,所以还是在用Native。从长远发展来看,未来到一定程度,可能会随着改版直接改成颤振。
  • 关于未来发展

    InfoQ:用了多年的Flutter,现在回头看,你觉得哪些公司和场景适合用Flutter?

    于佳(宗欣):目前看来,有几个典型场景比较合适:

  • 对于中台战略下的小前端产品,从大公司的组织来看,阿里、今日头条、美团都有相对完善的可以提供一些基础服务的Flutter组织或内部技术社区,保证了在前期投资过程中,基于Flutter的基础设施成本均分。在未来的落地过程中,业务团队可以更专注于业务研发,更少担心过程中的填坑成本。
  • 中小企业初创App,在人力成本资源不足的情况下,想先跑遍流程在线验证的团队可以尝试使用Flutter进行研发。在我自己的实际面试和行业交流过程中,这种情况也很典型。这种方式可以避免前期成本的过度投入,使人员调配更加灵活。
  • 另外,这个观点没有得到验证,但应该在逻辑上是可行的。未来对于企业内部流程工具,一些政府部门工具属性强的app可以尝试使用Flutter。据我所知,企业端有很多针对整个ToB(美团业务端)和ToD(例如饿了么骑手端)场景的app。横向来看,场景相似,这意味着更多的中长尾应用可能是颤振技术的主要场景。
  • InfoQ:你认为Flutter未来需要改进哪些地方?

    于佳(宗信):从Flutter 2.0发布后与一些一线开发者交流的经验来看,Flutter在跨端性能和细节体验的优化上仍需推进。去年,Flutter在大的战略方向(跨终端)上做得不错,在PC和Web上都有所建树,在与车企和操作系统厂商的合作上也有所进展。但是,回归产品体验和开发者体验还有很长的路要走。很多时候,对于一个严谨的商务党来说,小字体和控件的体验会是最后不选择这项技术的原因。这一部分希望整个开源社区在新的一年能够有所进步。在我们AliFlutter组织内部,以UC内核团队为首的同学在这方面有很多沉淀和PR,在内部引擎制定方面有很多经验提升。未来,在AliFlutter组织中,我们不仅会完善整个公司的基础设施,还会更加注重细节经验,为其他开发学员沉淀一些最佳实践。你会在两个月内看到我们最新出版的书籍。欢迎交流。



    InfoQ: Flutter 2.0来了,Flutter会成为主流选择吗?

    于佳(宗欣):你能告诉我我对Flutter未来的判断吗?一方面,在未来操作系统很可能拆分、多终端的场景下,Flutter会有一个比较好的发展。跨平台本身在成本端对企业尤其是互联网公司的需求很大。但是从历史经验来看,Flutter只是一个渲染引擎。即使在今天的游戏开发中,有了完善的游戏引擎和配套工具,一些功能模块(比如社区/直播功能)仍然是一个混合框架,所以混合开发必然一直存在。能否成为未来整个移动R&D的主流,我无法给出答案,但可以肯定的是,在生态更加完善之后,它将成为客户端R&D在某个历史阶段的又一种常见技术选择。

    嘉宾介绍:

    于佳,花名宗欣[/s2/],闲鱼技术团队客户端负责人。2012年毕业于阿里巴巴,经历了集团无线转型的重要时期,参与了集团多个重量级app和移动中间件的设计开发,是多年的客户端老兵。2014年,我参与了手机淘宝iOS客户端的架构升级,首次完成了对百人团队并行开发的支持。同年,我牵头将手机天猫客户端基础架构和交易链路整合到手机淘宝架构,为手机淘宝作为未来集团的无线中间站打下了坚实的基础。2015年加入闲鱼客户端团队,负责客户端架构和团队建设。工作期间,完成了基于Flutter混合架构的闲鱼客户端整体架构设计,完善了工程系统中Flutter的持续集成和高可用系统的支持,推动了闲鱼主链路业务的Flutter化。未来我们将持续关注终端技术的演进和发展趋势。

    您可以还会对下面的文章感兴趣

    使用微信扫描二维码后

    点击右上角发送给好友