在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相比,占用的空间会更小。如果把一些Native页面迁移到Flutter页面,Native依赖的减少,有希望抵消Flutter基础包的大小。 这也需要根据实际情况评估。

Flutter支持动态性吗?

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

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

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

  • 建设更快速的发版能力及更完备的自动化测试。

  • 将页面组件化,由服务端组装组件并推送到客户端。

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

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

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

  • 视频播放

  • 图片

  • ListView

  • 键盘

  • 浮层

  • 动画

  • 截屏

总结

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

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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69900359/viewspace-2287161/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/69900359/viewspace-2287161/

GMTC-闲鱼Flutter实践效果访谈相关推荐

  1. 《Flutter in action》开放下载!闲鱼Flutter企业级实践精选

    复制链接到浏览器 https://yq.aliyun.com/download/3792?utm_content=g_1000081730 下载. 闲鱼是国内最早使用Flutter的团队,也是Flut ...

  2. 重磅发布 | 承载亿级流量的开发框架,闲鱼Flutter技术解析与实战大公开

    简介: 闲鱼是国内最早接触使用 Flutter 的团队,经过多次研讨验证并大规模上线,在App性能.稳定性.开发效率上收益甚多.现在,闲鱼将这个过程中的一手实践知识和技术沉淀,整理成册 --<F ...

  3. 从原生到黑科技:闲鱼 Flutter 图片优化经历了什么?

    简介:阿里妹导读:图片加载是 APP 最常见也最基本的功能,也是影响用户体验的因素之一.在看似简单的图片加载背后却隐藏着很多技术难题.本文介绍闲鱼技术团队在 Flutter 图片优化上所做的尝试,分享 ...

  4. 闲鱼Flutter图片框架架构演进(超详细)

    那些年 早在闲鱼使用Flutter之初,图片就是我们核心关注和重点优化的功能.图片展示体验的好坏会对闲鱼用户的使用体验产生巨大影响.你们是否也曾遇到过: 图片加载内存占用过多? 使用Flutter以后 ...

  5. 闲鱼Flutter互动引擎系列——整体设计篇

    什么是Candy引擎 Candy引擎是闲鱼技术团队设计开发的一款: APP嵌入式的.轻量级的.易于开发.性能稳定的互动引擎: 绘制系统高度融合Flutter体系,游戏场景和Flutter UI支持无缝 ...

  6. 干货|Flutter 原理与闲鱼深度实践

    王康(正物)-- Flutter 官方成员 阿里巴巴技术专家,之前主要负责 Flutter 在闲鱼中的混合开发体系,目前重点关注 Flutter 深入度以及生态相关的工作.本文将分享三方面内容, Fl ...

  7. Flutter 原理与闲鱼深度实践

    作者|王康(正物) 出品|阿里巴巴新零售淘系技术部 王康(正物)-- Flutter 官方成员 阿里巴巴技术专家,之前主要负责 Flutter 在闲鱼中的混合开发体系,目前重点关注 Flutter 深 ...

  8. Archsummit 2019重磅分享|闲鱼Flutter&FaaS云端一体化架构

    作者:闲鱼技术-国有 讲师介绍 国有,闲鱼架构团队负责人.在7月13号落幕的2019年Archsummit峰会上就近一年来闲鱼在Flutter&FaaS一体化项目上的探索和实践进行了分享. 传 ...

  9. 骨骼动画实现秘密!闲鱼 Flutter 互动引擎告诉你

    简介: 代表骨骼动画是一种通过控制骨骼参数来实现多帧动画的方式,区别于 GIF 的不连贯和序列帧的体积大,骨骼动画有较好的灵活性和流畅性.目前骨骼动画已经被大规模地在游戏和动画中所使用,大有一种取代帧 ...

最新文章

  1. vb.net連接ACCESS数据库
  2. 深入Python(1): 字典排序 关于sort()、reversed()、sorted()、cmp()等
  3. Drawable 添加过滤色,改变图片颜色
  4. tabindex, taborder和notab属性的区别
  5. Cloud Foundry Session Affinity(Sticky Session)的实现
  6. 机器学习学习吴恩达逻辑回归_机器学习基础:逻辑回归
  7. antlr_ANTLR –语义谓词
  8. java 抽象类_java中的抽象类
  9. 好看的php提示弹窗,漂亮的jquery提示效果(仿腾讯弹出层)
  10. 【Day03】使用原型最大的好处及原型链的理解
  11. 8.霍夫变换:线条——霍夫的效果、噪声对霍夫的影响、霍夫拓展_5
  12. SEO工具,站长必备
  13. Java实现简易的文本编辑器
  14. ESP8266 教程3 — 通过TCP组建局域网并通信
  15. CrossApp V1.0.1,新增动画与连接 wifi 功能
  16. 对booth算法的一点理解
  17. easyexcel1.0导出excel测试案例
  18. 2022盘点工作室常用的API数据接口开发平台
  19. BZOJ 1921: [Ctsc2010]珠宝商 点分治套SAM
  20. easyExcel导出表格及合并单元格

热门文章

  1. ibdata1是什么?
  2. Java 基础学习-Java语言概述
  3. 浙江大学 计算机学院 交互设计,浙江大学交互设计考研经历分享(原来跨考这么受欢迎)...
  4. 操作系统基本功能(操作系统)
  5. php接入微信支付宝支付,php 微信公众号接入支付宝支付
  6. 苹果手机中病毒显示无服务器,iPhone手机真的不会“中毒”?出现这3个状况就要小心了...
  7. 初涉莫比乌斯反演(附带例题)
  8. 甘肃兰州年内发行市民卡
  9. (转)美国FBI的变态心理学测试
  10. ORALC 抛出ORA-12154的错误