• 简中
    • 繁中
  • 注册
  • 查看作者
  • 闲鱼正喺度悄悄放弃Flutter吗?

    转载:本文来自微信公众号“InfoQ”(ID:infoqchina),作者:Tina,转载经授权发布。

    闲鱼喺 2017 年引入 Flutter,当时嘅 Flutter 还远未成熟,行业内也没有将 Flutter 放入已有工程体系进行开发嘅先例。

    之后这支唔到 15 人嘅闲鱼团队从工程架构、混合栈调用、打包构建、协同模式上都做‌一啲创新,保证‌ Flutter 能融入到闲鱼已有嘅客户端工程体系内。喺 2017 年到 2019 年期间,闲鱼也唔断嘅修正 Bug 提高 Flutter 嘅稳定性并同步畀 Google,并喺实践中沉淀出一套自己嘅混合技术方案,开源‌ Flutter Boost 引擎。

    2019 年,闲鱼开始大规模落地,推进 Flutter 喺闲鱼嘅应用。2020 年,闲鱼线上嘅主链路几乎已经完全拥抱 Flutter。这两年,Flutter 也逐渐喺第啲企业里落地,但同时也唔断有质疑嘅声音发出。甚至有传言表示“闲鱼嘅新业务已经放弃 Flutter”、“相信闲鱼遇到‌好大嘅难题”……

    那么,作为 Flutter 先驱和探路者,闲鱼喺过去几年嘅摸索过程中系咪有走弯路?闲鱼而家到底面临住乜嘢样嘅挑战?系咪会放弃 Flutter?新业务选择‌乜嘢技术?对应嘅技术选型原则是乜嘢?针对呢啲疑问,闲鱼技术团队客户端负责人于佳(宗心)逐一畀‌我哋解答。

    国内第一个引进 Flutter 嘅团队

     InfoQ:闲鱼当时引进 Flutter 时主要是为认识决乜嘢问题?

    于佳(宗心):闲鱼喺 17 年调研嘅时候,客户端团队只有唔到 15 人,而闲鱼嘅业务场景可以称得上系一个“小淘宝”,相对比较复杂。呢种场景下我哋首先需要解决嘅系多端人力共享嘅问题。多端人力带来嘅好处唔只是可以一人开发双端,也代表住更好嘅研发资源调配灵活性(这意味住团队嘅 iOS:Android 嘅比例唔再需要 1:1,而市面上 Android 嘅工程师基数远大于 iOS)。

    另外我哋希望呢个技术是贴合移动端研发技术栈嘅,而非前端技术栈,本身对于 RN 和 Weex 嚟讲,工具链和研发习惯还是有比较大嘅差异嘅。最后我哋希望呢个技术嘅体验可以做到接近原生,AOT 下嘅 Flutter 基本满足我哋当时嘅要求,喺实际测试过程度,同样未深度优化嘅详情页面,Flutter 喺低端机嘅表现比 Native 更好。因此当时基于这三个条件选择‌ Flutter。

    2018 年嘅尝试投入过程度,成个基建和探索带来‌一定嘅成本。2019 年,团队开始正式大量使用 Flutter 进行研发,目前成个团队 70% 嘅 commit 来自 Dart,可以说基本完成‌我哋当初嘅期望。喺实际嘅研发过程度,基本可以完成一个需求一个客户端投入嘅目标。

     InfoQ:好多人质疑 Dart 语言,认为呢个语言独特小众,仲要存喺比如说多层嵌套嘅问题,您们点样睇待新语言嘅应用?

    于佳(宗心):语言是我哋选择技术方案嘅其中一个因素,但是相对比较弱嘅因素。

    我哋会从几个角度去睇:

    • 语言嘅背景,从我哋嘅角度来睇 Dart 是大厂研发嘅,也有比较耐嘅历史。

    • 语言嘅学习成本,从语法糖和学习曲线上来睇,Dart 成本都比较低,首先 Android 同学嘅上手率好快。另外熟悉 swift 嘅 iOS 同学,上手也好快。现代语言嘅特性有好多是相通嘅。这部分是佢嘅优势。

    • 语言带来嘅第啲优势,如编译产物支持 AOT 和 JIT,比较灵活。AOT 有明显嘅性能优势。

    • 语言嘅未来嘅趋势。Dart 喺 2020 年第四季度 Github Pull Request 嘅排名已经到‌全网第 13 位,超过‌ Kotlin(15 位),Swift(16 位),Objective-C(18 位)。作为移动技术领域嘅新语言成长性还是非常唔错嘅。

    对于像多层嵌套嘅问题,可以通过进一步抽象一啲控件类或方法解决,并唔系特别大嘅问题。

     InfoQ:闲鱼引入 Flutter 之后做‌边啲关键创新?喺使用 Flutter 上有边啲收益?

    于佳(宗心):闲鱼喺这部分创新非常多,并喺内部申请‌非常多专利。

    • 我哋嘅开源项目 Flutter Boost 彻底改变‌ Flutter 官方嘅一啲 RoadMap。目前 Add2ExistApp 是行业最主流嘅研发方式。混合开发一方面帮助‌业务更平滑嘅迁移到‌新嘅技术栈,另一方面可以更好嘅利用已有嘅 Native 能力,大幅减少‌重复开发嘅工作。

    • 针对音视频嘅外接纹理方案,都系目前行业大厂常见嘅解决方案,喺外接纹理方案下,Native 和 Flutter 侧嘅缓存管理得到‌统一,喺性能上也有一定嘅提升。

    • Flutter APM,基于 Flutter 技术栈嘅性能稳定性数据采集和加工方案,目前喺集团内部都系跟多个 BU 一齐共建,为大嘅 AliFlutter 组织提供服务。

    • Flutter 相关嘅动态模版方案,Flutter DX,兼容集团嘅已有嘅 Native 模版,保证‌业务嘅平滑迁移,并为 Flutter 提供‌部分业务动态性。

    • 第啲仲有好多,包括内部嘅高性能长列表容器 PowerScrollView,动画框架 Fish-Lottie,游戏引擎 Candy,我哋而家仲有一啲新嘅方向喺沉淀,喺基于 Flutter 嘅研发流程和研发工具上也有投入,未来大家如果感兴趣可以去 InfoQ 组织嘅行业大会同我哋交流。

    闲鱼有想过放弃 Flutter 吗?

     InfoQ:最近一两年,您喺 Flutter 开发上,遇到嘅最大挑战是乜嘢?跟最初使用 Flutter 时嘅挑战一样吗?

    于佳(宗心):早先几年闲鱼作为成个行业嘅先驱,主要嘅挑战是成个技术生态太差,都需要自己做。另外就是前期引擎嘅稳定性有比较大嘅问题。

    最呢几年随住成个技术嘅深度使用,以及闲鱼这两年业务快速发展背后,越来越多嘅体验问题被大家提及,因此我哋从上年开始进行‌成个产品嘅大改版,同时客户端嘅目标就是全面优化,打造更好嘅用户端产品体验。

    因此喺生态逐渐完善后,我哋嘅挑战是,点样通过 Flutter 来实现更加精细化嘅用户体验。上年,呢部分确实花‌我哋比较多嘅精力。基于呢个命题,我喺内存和卡顿上内部也开发‌较多嘅基于 Flutter 嘅检测工具,喺内存优化和卡顿优化上也有一啲比较具体嘅方法,但唔得唔说,所有嘅细节优化都系比较耗人力嘅,唔管是 Native 还是 Flutter 都要投入相当嘅精力,所以我哋目前也面向全行业进行客户端嘅招聘,希望有志喺 Flutter 领域进行探索嘅同学联系我。

     InfoQ:喺混合研发体系下,闲鱼还进行‌引擎定制,噉样官方提供嘅方案主要问题是乜嘢?对于一般小企业嚟讲,混合开发复杂度会唔会太高?

    于佳(宗心):闲鱼喺前期有唔少修改引擎嘅动作,我针对当时有一啲自己嘅反思,一方面是确实因为 Flutter 唔系几完善,另一方面喺 18 年左右,我哋自己引擎嘅理解也唔够深刻,好多时候可以通过更上层嘅方案解决,呢也间接导致‌我哋嘅好多引擎定制修改难以合入主干。

    所以这部分我谂说嘅系,目前官方嘅方案可以解决 90% 嘅问题,如果一定要说定制,目前喺性能侧还是有一啲问题嘅。比如闲鱼目前首页还是 native 没有使用 Flutter,就是因为替换以后启动加载体验唔佳,另外喺长列表侧大家一直诟病嘅卡顿问题,我哋有尝试通过上层框架解决‌一部分,接下来可能仲系要要底层引擎帮忙优化。另外一啲包括双端字体唔一致嘅问题,仲有输入框体验唔一致嘅问题,都需要官方进行长期嘅优化。

    目前我哋主要还是希望跟随主干分支,尽量唔修改 Flutter 嘅代码,闲鱼团队会储备一啲引擎侧嘅专家,同时也会依靠集团 AliFlutter 嘅生态做事。喺成个 AliFlutter 嘅组织里唔同嘅 BU 擅长嘅也唔同,如 UC 同学更擅长引擎定制,闲鱼团队有大量嘅上层应用框架,淘宝团队提供基于构建相关嘅基础设施。咁样喺大型公司中通过内部开源社区嘅方式就可以解决大部分嘅问题,放心开发嘎啦。

    对于中小企业嚟讲,要明确下大家面临嘅场景,如果前期快速迭代跑起来,对细节问题可以有一部分妥协,选择 Flutter 系一个比较明确嘅路径。今日大家所处嘅环境比闲鱼当年所处嘅环境要完善嘅多。推荐使用 Flutter Boost 进行混合开发,喺部分场景下遇到问题无办法快速响应时,也可以通过混合工程使用 native 进行兜底。复杂度方面,单纯引入混合栈能力,整体复杂度一般。

     InfoQ:有传言,闲鱼有新业务没采用 Flutter,呢畀好多人造成‌闲鱼放弃 Flutter 嘅观念,噉样您喺新业务嘅技术选型上,考虑‌边啲因素?

    于佳(宗心):作为技术决策者,是应该避免自己被某一个技术绑架而喺落地过程中产生谬误嘅。Flutter 和第啲技术一样,最终是为‌帮助团队实现业务价值,同时佢也只是移动端嘅一种技术,捧杀和谩闹都系唔合适嘅。哩个都系我特别唔想喺公众面前回应呢个事嘅原因,因为技术本身要睇适用场景。

    从目前闲鱼嘅人员规模和业务规模来睇。对于架构设计,我嘅理念是尽量追求一致性和架构嘅简洁。

    成个客户端组织未来从语言嘅方向来睇是 Dart First,尽量减少双端嘅研发投入。而对第啲容器嘅选择,主要以 H5 为主,喺未来嘅路径上尽量减少第啲容器嘅接入,让前端开发也回归到标准路线来。

    这里有两个好处:

    1、组织成本最低,组织成本包括‌同学们嘅学习成本、协同成本等等,多技术栈和容器多会带来额外嘅成本,呢是我唔愿意睇到嘅。

    2、架构嘅一致性对研发效能和质量都有帮助。举个例子,随住业务复杂性加大,多容器带来嘅内存飙升和包大小嘅问题是非常致命嘅,而且几乎是无解嘅,呢就需要架构师作出决策,干掉乜嘢留下乜嘢。回到研发效能上,配套嘅工具,流程一定是围绕一类容器和语言来扩展嘅,如果方案特别多,每个方向都需要做额外嘅配套设施,成本收益好低,研发嘅幸福感也好低。

    从呢个设计嘅角度出发,我哋会有几个明确嘅选择:

    • 喺默认场景下使用 Flutter 作为首选嘅方案;

    • 喺投放活动、前台导购、非常唔确定嘅新业务、以及管理后台等使用 H5 作为首选实现方案;

    • 喺极少场景下,比如已有完整嘅 SDK 附带 UI 嘅支持如直播,以及未来中台嘅拍摄功能 SDK 都系自带 UI 嘅部分,如要切换,Native 成本最低,选择 Native。另外目前 Flutter 喺首页加载仲有一定嘅性能问题,因此仲喺度使用 Native。从长远发展来睇,未来到一定程度可能随改版直接改为 Flutter。

    关于未来发展

     InfoQ:使用 Flutter 多年后,而家回过头去睇,您认为边啲公司边啲场景适合 Flutter?

    于佳(宗心):目前睇起来有几个典型场景比较适合:

    • 中台战略下嘅小前台产品,从大公司嘅组织里睇阿里、头条、美团都有相对完善嘅 Flutter 组织或内部技术社区可以提供一啲基础服务,保证‌基于 Flutter 基础设施喺前期投入过程中嘅成本均摊,喺未来落地过程度,业务团队可以更加专注于业务研发,而更少嘅担心过程中填坑嘅成本。

    • 中小型企业嘅初创 App,喺人力成本资源都唔够嘅情况下,希望先跑通流程上线验证嘅团队,可以尝试使用 Flutter 进行研发,喺我自己实际嘅面试和行业交流过程度,呢一类情况也比较典型。呢种方式可以避免前期成本过度投入,喺人员调配上也更加灵活。

    • 另外呢个观点仲未有验证,但是逻辑上应该可行。未来面向企业内部流程工具,政府部门嘅部分工具属性较强嘅 App,可以尝试使用 Flutter。因为目前我认识嘅情况来睇,喺企业这边嘅应用来睇,整体 ToB(美团商家端)和 ToD(比如饿‌么骑手端)嘅场景嘅 App 特别多。横向比较来睇,场景比较类似,也就是说更多中长尾应用有可能系 Flutter 技术嘅主要场景。

     InfoQ:您认为未来 Flutter 急需改善嘅地方是乜嘢?

    于佳(宗心):从 Flutter 2.0 发布后我跟一啲一线开发者交流嘅感受来睇,Flutter 还是需要推进跨端性能和细节体验嘅优化。上年一年喺大嘅战略方向上(跨终端),Flutter 做嘅唔错,喺 PC 和 Web 侧都有建树,跟车企以及操作系统厂商合作都有一定进展。但回归到产品体验和开发者体验上,仲有唔少路要走,好多时候对于一个严苛嘅业务方嚟讲,小到字体和控件嘅体验都会成为最后唔选择这门技术嘅原因。这部分希望成个开源社区喺新嘅一年能有一啲进步。我哋 AliFlutter 组织内部,以 UC 内核团队为首嘅同学们,喺这方面就有非常多嘅沉淀以及 PR,喺内部引擎制定上有好多体验嘅提升。未来喺 AliFlutter 组织内,我哋也会除咗完善成个公司嘅基建外,进一步关注细节体验,沉淀一啲最佳实践畀到第啲嘅开发同学。

     InfoQ:Flutter2.0 来嘎啦,噉样 Flutter 会成为主流选择吗?

    于佳(宗心):可以讲一下我对 Flutter 未来嘅判断。一方面喺未来操作系统有可能走向分裂,多终端嘅场景下,Flutter 会有比较唔错嘅发展,跨平台本身嘅对企业嚟讲喺成本侧是有好大嘅诉求嘅,尤其系互联网公司。但是从历史嘅经验来睇,Flutter 只是渲染引擎,就算今日嘅游戏开发,喺游戏引擎和配套工具完善嘅情况下,有部分嘅功能模块(比如社区 / 直播嘅功能)依然还是混合嘅框架,所以混合开发最后一定系一直存喺嘅。能唔可以成为未来成个移动研发嘅主流呢件事上睇,我无办法畀出答案,但可以肯定嘅系,喺生态更加完善后,会喺一定嘅历史阶段成为客户端研发嘅另一种常见嘅技术选择。

    嘉宾介绍:

    于佳,花名宗心,闲鱼技术团队客户端负责人。2012 年应届毕业加入阿里巴巴,经历集团无线化转型嘅重要时期,参同过集团多款重量级 App 以及移动中间件嘅设计同开发,多年客户端老兵。2014 年参同‌手机淘宝嘅 iOS 客户端嘅架构升级,该架构首次完成‌对百人团队并行开发嘅支持,同年主导‌手机天猫客户端基础架构以及交易链路向手淘架构嘅归一,为手机淘宝作为未来集团无线中台奠定‌坚实嘅基础。2015 年加入闲鱼客户端团队负责端架构和团队建设,工作期间完成‌基于 Flutter 混合架构嘅闲鱼客户端嘅整体架构设计,喺工程体系上完善‌针对 Flutter 嘅持续集成以及高可用体系嘅支撑,同时推进‌闲鱼主链路业务嘅 Flutter 化。未来将持续关注终端技术嘅演变及发展趋势。

    cantonese.live 足跡 粵字翻譯

    2021-04-25 19:35:35

  • 0
  • 0
  • 0
  • 160
  • 请登录之后再进行评论

    登录
  • 任务
  • 发布
  • 偏好设置
  • 单栏布局 侧栏位置: