纯 Dart 的挑战:美团外卖 Flutter 动态化实践( 二 )


  • 需要在整体架构上区分 “准备符号”与“运行”两个阶段;
  • 需要考虑到视图和逻辑两个场景;
  • 需要考虑到系统类与自定义类的两种调用与加载方式;
  • 需要用一套合理的 bundle 管理机制做好相应的隔离与约束 。
除此之外,还需要同步搭建支撑动态化的技术生态与工具,包括 IDE 语法检测插件(把问题前置到开发阶段)、代码生成工具、降级容灾系统等 。对开发同学的技术储备要求较高 。
【纯 Dart 的挑战:美团外卖 Flutter 动态化实践】业务落地只是目标之一,更重要的是在项目的实践过程中发现框架存在的问题,完善各类语法特性支持,提高在复杂的场景下的兼容性,促进框架的完善 。在不断打磨中总结出合理的调试方案、操作步骤与协作方式,不断提升开发效率与体验 。完善动态化基建及工具链建设,完成动态化流程的自动化与工程化,进一步降低转换与开发成本 。
实际进展与开源计划线上有些资料因为发布时间的问题,所以消息可能有滞后,现在已经 12 月上旬了,也快年底总结了,就以现在的口径为准吧 。目前外卖业务已经真实上线了 100+ Flap 页面,40+业务模块 。目前外卖商家端的跨端与动态化覆盖度达到 90% 左右 。且已经在多个业务线实行需求动态发布流程,可动态上线的需求占比 60~80%,整体也是达到了年初时的预期 。
至于开源应该到 21 年 Q2Q3 。其实 sdk 很早就开发完了,之后是在通过业务落地来反哺 sdk 框架的打磨 。Flap 团队之所以没有第一时间开源,是因为觉得自己业务没广泛运用就开源是在“耍流氓”,后来我们也的确是优化了挺多问题 。下半年在能力和生态都建设的不错,一些边界的语法逻辑也都有了比较优雅的解决方案,接下来会在 Flutter 页面“零成本”转动态化的实施上再完善下,应该在 21 年 Q2Q3 左右开源 。
Flutter 的使用体验与性能在开发时,Flutter 这种累砖块的布局方式写起来“很爽”,客户端同学很好上手,大家反应写起代码来很快,在开发效率上已经有了不错的表现 。
Flutter 的双端一直性做的很好,经常很多 Android 同学开发时拿 iOS 模拟器调试(因为 Android 调试一般都需要使用真机比较麻烦),iOS 模拟器开发完需求之后,拿 Android 设备再一跑大多都没问题 。Native 基本就是提供好一些端能力的桥就 ok 了 。性能方面,Flutter 和 Native 也很接近,没有 bug 的情况下,帧率也都是 59 朝上,渲染成功率也都是三个 9 以上 。
在质量方面,目前外卖商家端的客户端 crash 和 Dart 异常是分开采集的 。Flutter 大量覆盖之后 crash 占比中只有不到 10% 的量是由 Flutter 引起的,Dart 异常率不足千分之一 。有时候上报的 Dart 异常并不会影响到用户的体验,例如有时候代码缺陷关了一个弹窗,报了一个异常,但弹窗依旧正常关闭了等等 。
总的来说,使用 Flutter 后,在效率、质量、性能三个关键点上都达到了的预期,今年年底前,美团外卖商家端应该会将 Flutter 动态化覆盖至 80%以上 。
跨平台开发更应该是百花齐放从 2010 年 Android 伴随 Android 2.3 大火到 2013 年 iOS 伴随 iOS 7 进入大家的视野以来,客户端每年基本都有大新闻,2014 年 H5 的广泛应用让大量项目补充 Hybird 能力 。然后 2015、16 年 React Native 和 Weex 相继开源,大家先后投入到跨平台的开发 。2017 年小程序和 PWA 先后登录,但 PWA 在 2018 年并没有达到人们期待的高度,小程序则是稳扎稳打,移动端的流量也在逐步像小程序倾斜 。但小程序的问题是巨头公司太多框架太多,谁都想做最大的平台,标准暂时统一不起来,还有一些路要走 。然后 2018 年 Flutter 1.0 出台,并且逐步有后来居上的优势,优点前面讲过了,在 GitHub 上的 star 数也是逐步超过了 Weex 和 React Native 。
董尚先表示,目前 React Native 还是很强大,因为 React 互通的生态很多 。但从长远目光来看,他觉得 Flutter 有成为商业 721 法则中的“7”的潜力 。最大的特点 Flutter 是自渲染引擎,Flutter 的 embedder 层是非常轻薄的,同时也是目前跨端数量最多的,可以跨 6 端:
iOS / Android / Web / linux / mac / Windos 并且新系统 Fuchsia 也很大可能使用 Flutter 引擎 + Dart 语言 。
目前许多大厂在同时使用多套跨平台方案,而不是单从某些标准抛弃其他择其一 。未来一段时间内基本会过渡并维持到「内嵌 web 容器 + 少量 Native(端能力相关)+ Flutter / React Native 二选一+ 小程序」这样一个组合 。


推荐阅读