Native & Weex首先我们想到了 Native 。起初我们尝试在 Native 双端都设计有同样概念的编程框架(OC/JAVA) , 统一端侧的代码标准 , 但落地的过程中发现两套代码及两个平台的差异很难避免 。
然后闲鱼又尝试了集团的 Weex 作为主链路的方案 。首先 , 闲鱼对主链路的稳定性要求较高 , 由于 Weex 的动态特性 , 线上只有一套代码 , 就有可能造成老版本的兼容性问题 。在产品主链路 , 即使有千分之一的页面由于兼容性问题也会引起舆情问题 , 这是业务方无法接受的 。其次 , Weex 的配套设施对客户端开发来讲存在一定成本 。最后我们得出结论 , Weex 在导购体系和活动等场景下有比较好的性能提升且集团的配套设施比较完善 , 但可能不太适用于主链路的业务 。
Flutter在 Native 和 Weex 都不适用的情况下 , 闲鱼继续着探索之路 , 在持续探索的过程中 , 偶然间发现了 Flutter 这个方案 。首先 , 从其设计理念来看 , Flutter 具有更好的多端一致性 , 优秀的性能 , 高效的研发配套工具 , 更贴近客户端的研发体系等等 。从客户端的角度出发 , 我们觉得这就是主链路苦寻的方案 。其次 , Flutter 背靠 Google 的同时又是开源产品 , 这点也给了我们信心 。所以 , 闲鱼团队决定尝试 Flutter 。
RN提到 Flutter 就自然会想到 RN , 对于 RN 来说 , 闲鱼团队在落地过程中并没有直接使用过 。我认为 RN 和 Weex 比较像 , 整个研发体系包括工具链上面还是更偏向前端 , Weex 的主要优势是研发效率和动态性 , 在性能侧相比 H5 会有一些优势 , 因此比较适合代替现有的 H5 方案 。而 Flutter 更偏向客户端的研发体系 , 研发效率和性能以及多端的强一致性是它的优势 , 基于这些优势 , 特别适合代替现有主链路的 Native 方案 。
闲鱼 App 引入 Flutter 后 , 在效率、性能 / 体验和质量三个关键点上的表现如何?效率在引入 Flutter 前 , 开发间协同成本很高 , 导致协同效率低 , 例如双端开发分别需要与测试协同 , 双端开发之间需要协同等等 , 这样就导致协同成本过高 。通过 Flutter 的落地 , 协同效率至少提升一倍 。在目前的闲鱼大部分需求都是一个客户端同学独立完成的 , 研发侧在效率部分目前有将近 80% 左右的客户端代码是双端共享的 , 而且比例还在提升 。
性能 & 体验在早期我们做过一个实验 , 在低端机上 , Flutter 开发的新详情的性能是优于老详情的性能的 。由于对绘制侧的统一优化以及对 GPU 的使用 , 让很多开发同学可以在复杂场景写出性能不错的代码 。性能侧目前还有很多工作要做 , 由于 Flutter 的性能基线跟 Native 不太一样 , 在业内严谨的性能标准还没有出现 。闲鱼团队最近还在与 Google 的同学沟通 , 看后续是否能一起定义 Flutter 侧性能的行业标准 , 并帮助完善部分 Flutter 社区的性能优化工具 。
质量质量侧 IOS 在内存消耗以及 crash 率上略高于 Android , 因此闲鱼在 Engine 侧做了一些优化和定制 , 阿里内部有比较严格的对 crash 率的标准 , 可以说目前看下来质量满足上线要求 。
落地过程中有没有遇到一些挑战呢?闲鱼是如何解决这些挑战的呢?闲鱼 App 引入 Flutter 后 , 在多方面都有了显著的提升 , 但落地过程并非一帆风顺 , 挑战一直伴随着整个落地过程 。大致分为三个阶段:
第一个阶段主要的问题是行业内没有把 Flutter 放入已有工程体系进行开发的先例 。
我们在这个过程中从工程架构、混合栈调用、打包构建、协同模式上都做了一些创新 , 保证了 Flutter 能融入已有闲鱼的客户端工程体系之内 。后续我们推动了 Google 在 milestone 的变更 , 重点开始关注混合架构下的研发体验和配套设施 , 就是今天大家看到的闲鱼了 。同时这个过程中我们沉淀出了现在团队在开源社区推出的混合栈框架 Flutter_Boost 。
【闲鱼 Flutter 实践与思考】第二个阶段主要的问题是性能和稳定性 。
在初期几版灰度上线过程中 , 我们使用的是 v0.5.6 版本 , 当时还不是特别稳定 , 我们经常会因为 crash 以及一些诸如手势冲突相关的 bug 修改引擎并同步给 Google 的同学 。另外 , 在中国特有环境下的适配问题 , 也需要我们对引擎依赖的一些三方库进行修改以适配各个厂商特有的 ROM 带来的 bug 。我们还发现音视频和图片的内存占用和 CPU 消耗上有不少问题 , 这个过程中我们也做了针对性的改进 。
推荐阅读
- Java一些写法的最佳实践
- Android组件化开发思想与实践
- 自动化运维工具Ansible之LNMP实践环境部署
- 召回算法实践总结
- CentOS7分布式部署open-falcon0.3.0实践
- 初中学生假期社会实践报告范文 中学生社会实践报告
- 弹幕系统设计实践
- 分布式定时任务调度框架实践
- Java中异常处理的10个最佳实践
- 超实用的18个Java8日期处理的实践!建议收藏!
