GMTC-闲鱼Flutter实践效果访谈

简介:

闲鱼技术-国有

在2018 GMTC大会上,Google Flutter宣布了首个发布预览版。同台亮相的闲鱼,是国内首个将Flutter用于大型实践,并用在重要场景的应用。同时闲鱼对Flutter技术演进也产生了重要的影响。做为新一代的高效移动开发技术,Flutter受到了国内开发者的密切关注。

本文邀请GMTC演讲嘉宾闲鱼架构负责人王树彬,分享闲鱼的实践效果和一些常见问题。

闲鱼为什么选择了Flutter?

Flutter是Google下一代操作系统Fuchsia的UI框架,在保持原生性能的条件下实现了跨端编程,为未来的移动开发格局变革提供了巨大的机会和想象力。

很多朋友好奇,闲鱼这样一个业务快速发展的App,为什么敢于使用Flutter这样的新技术。我想这一方面是因为闲鱼对技术的追求;另一方面,闲鱼在正式引入Flutter前,对Flutter的原理、团队、趋势做了充分的预研。

现有流行的跨端解决方案中,通常性能无法做到最好,很难达到与原生一样的流畅体验。虽然闲鱼一些页面使用了现有的动态化跨端方案,但出于个性化交互及流畅体验的考虑,主链路页面(首页、详情、发布、消息、交易等)一直无法使用,只能用原生开发。Flutter通过自建绘制引擎,AOT编译,线性布局和渲染等机制,达到了与原生一样甚至更好的性能。仔细去了解Flutter的原理,会发现很多优秀的设计。

闲鱼Flutter解决了哪些问题?

在没有经过大规模应用验证的情况下,框架成熟度和稳定性有很大的风险和挑战。此外,闲鱼希望将现有的Native页面渐进式迁移到Flutter,这种混合开发,闲鱼之前业界也没有成熟的先例。

闲鱼做了个大胆的尝试,挑选重要且复杂商品详情页作为第一个迁移到Flutter的页面。通过这个方式,快速暴露和解决Flutter相关问题,最终项目顺利成功。详细可以到GMTC下载闲鱼专场分享的文档GMTC,或者关注“闲鱼技术”公众号查看更多深入的文章。

闲鱼遇到的通用问题,已经在Flutter官方中同步修复。一些混合编程的私有问题,闲鱼会沉淀为文档供大家参考,必要的组件也可以沉淀为Package。

解决的一些典型问题举例如下

混合问题

  • 混合工程
  • 混合编译,构建
  • 混合页面栈管理
  • Native视频播放器复用
  • Native页面组件混合

兼容性问题

  • Armv7编译
  • 视频播放白屏
  • 中文字体
  • icu data
  • 截图
  • 图片内存溢出Crash

当然,我们还在继续,有新的问题发现时会不断优化和完善。

能说说引入Flutter的实际效果和收益吗?

性能上,Flutter页面和Native页面体验接近,甚至数据上看在一些低端机上Flutter会更流畅,人肉眼已经很难区别。

研发效率上:

  • 旧页面迁移到Flutter的过程,效率是下降的。 以前沉淀的UI组件,需要在Flutter上重新实现。
  • 对于全新的页面需求,或者是已经迁移完成的页面上的新需求,可以明显看到Flutter跨端带来的效率提升。除了两端变一端的好处外,还有协同减少、一致性提升、Hotreload开发等好处。
  • 此外,Flutter线上仍然有一些Crash存在,虽然比例不高,但还是会带来一定的排查成本。定位这类问题需要对Flutter的原理有一定的理解。

包大小的问题你怎么看?

Android的Apk增加8M,iOS压缩包增加16M。
包大小确实是大家需要权衡的问题。我的理解,非常大的App(100M+)以及非常小的App(10M-),通常会对包大小很敏感,根据自己应用的情况来选择。

评估包大小问题时,几个额外信息提供大家方便参考:

  • 包大小是官方正在重点优化的一个问题。以Android为例,我觉得一年内有希望优化到5M以下。
  • 考虑到Flutter有Treeshaking技术,无用的代码不会被编译到安装包中,所以随着依赖包的变多,Flutter与Native相比,占用的空间会更小,这也是Flutter的一个优势。如果把一些Native页面迁移到Flutter页面,Native依赖的减少,有希望抵消Flutter基础包的大小。 这也需要根据实际情况评估。

Flutter支持动态性吗?

Flutter目前还不支持线上动态性,虽然有解决方案,但闲鱼也并未将动态做为重点。跨端、动态、性能目前还是三角形制约关系,无法兼得。

Android上通过更新Flutter产物,较容易实现动态。iOS上由于审核原因,实现动态的成本很高。

有些策略可以一定程序缓解动态要求,但无法完全解决:

  • 建设更快速的发版能力及更完备的自动化测试。
  • 将页面组件化,由服务端组装组件并推送到客户端。

Flutter的线上稳定性目前怎么样了?

大家可以关注闲鱼已经迁移完成的页面,目前是商品的详情页。详情页用到的Flutter接口和功能,目前已经线上验证OK,达到生产稳定性的要求。闲鱼正在逐步将Flutter应用在更多的页面,覆盖的场景会越来越多,欢迎关注闲鱼后续进展。

详情页覆盖的主功能包括:

  • 视频播放
  • 图片
  • ListView
  • 键盘
  • 浮层
  • 动画
  • 截屏

总结

闲鱼会继续与Google和社区紧密合作,完善Flutter,并基于Flutter建设全新的一体化研发模式。希望为业界类似App提供架构参考。

欢迎敢于挑战,有勇气改变世界的同学,加入闲鱼,一起打造新一代高效研发架构,一起实现让天下没有闲置的梦想。

欢迎联系树彬: guoyou@alibaba-inc.com

相关文章
|
缓存 移动开发 监控
Flutter 流畅度优化实践总结
“围绕 Flutter 流畅度体感优化,分享了挑战、线上线下监控工具建设、优化手段在组件容器沉淀,最后给出了优化建议。"
1428 0
Flutter 流畅度优化实践总结
Flutter(十八)——支付宝咻一咻动画实践
Flutter(十八)——支付宝咻一咻动画实践
197 0
Flutter(十八)——支付宝咻一咻动画实践
|
移动开发 weex 定位技术
Flutter PlatformView 在闲鱼直播业务中的实践
PlatformView 自定义事件分发探究
493 0
Flutter PlatformView 在闲鱼直播业务中的实践
|
存储 缓存 JSON
重度使用Flutter研发模式下的页面性能优化实践
淘宝特价版是集团内应用Flutter技术场景比较多,且用户量一亿人以上的应用了。目前我们首页、详情、店铺、我的,看看短视频,及评价,设置等二级页面都在用Flutter技术搭建。一旦Flutter有性能瓶颈,重度使用Flutter研发的我们该如何做到性能优化?
重度使用Flutter研发模式下的页面性能优化实践
|
Dart 监控 算法
闲鱼是怎么面向Flutter做技术体验升级的?
蛇打七寸,拨云见日——更快的flutter,更好的闲鱼
3856 0
闲鱼是怎么面向Flutter做技术体验升级的?
|
移动开发 Dart 监控
Flutter 在阿里淘系的体系化建设和业务实践
Flutter 这两年的热度不断提升,行业内投入建设 Flutter 的公司也越来越多,有很明显的上升趋势。 作为一个技术框架,Flutter 该有的功能都有了,但要把它应用到业务中去,还得解决工程问题、复用已有的技术积累、融入业务的工作流等,还要针对特定的业务场景做增强和扩展。所以,我们的核心目标是把 Flutter 从一个单点的技术框架,打造成完整的企业级解决方案。
2869 0
Flutter 在阿里淘系的体系化建设和业务实践
|
机器学习/深度学习 缓存 运维
闲鱼基于Flutter+FaaS的业务框架思考与实践
闲鱼将使用 Flutter 和 FaaS 来建设未来的技术开发体系,这是一项长期的规划,新的技术在现在看来犹如雾里看花,需要我们不断的思考,探索,实践才能渐渐描绘出它的轮廓。本文对此提供一种思考角度,对未来基于 FaaS+Flutter 之上的编程形态做思考,并介绍自己的初步实践。
2028 0
闲鱼基于Flutter+FaaS的业务框架思考与实践
|
域名解析 弹性计算 Prometheus
不用 H5,闲鱼 Flutter 如何玩转小游戏?| 1月7号云栖号夜读
今天的首篇文章,讲述了:最近APP游戏化成为了一个新的风口,把在游戏中一些好玩的、能吸引用户的娱乐方式或场景应用在应用当中,以达到增加用户粘性,提升DAU的效果,成本较低。同时在一些需要对用户有引导性的场景,游戏化还可以使用户更易于接受并完成引导性任务,并通过激励的形式鼓励用户持续沉浸在任务当中,形成良性循环。
5150 0
不用 H5,闲鱼 Flutter 如何玩转小游戏?| 1月7号云栖号夜读
不用 H5,闲鱼 Flutter 如何玩转小游戏?| 开发者必读(132期)
最近APP游戏化成为了一个新的风口,把在游戏中一些好玩的、能吸引用户的娱乐方式或场景应用在应用当中,以达到增加用户粘性,提升DAU的效果,成本较低。同时在一些需要对用户有引导性的场景,游戏化还可以使用户更易于接受并完成引导性任务,并通过激励的形式鼓励用户持续沉浸在任务当中,形成良性循环。基于这个思路,闲鱼开发了互动引擎Candy。
2205 0
|
开发框架 缓存 运维
基于Flutter+FaaS的业务框架思考与实践
作为一个过来人,我给大家的建议是...
1874 0
基于Flutter+FaaS的业务框架思考与实践