重构原因
技术栈原因
- RN不足之处
- 开发体验差,android模拟器卡,真机会因为各种原因无法调试运行
- 开源组件质量良莠不齐,经常break change,我们几次尝试升大版本都失败
- 理论性能上限低,组件最终调用的是native的,安卓系统分布非常碎片化,大量的platform判断逻辑,兼容适配的成本高,表现很难统一。和Native通信只能是异步模型,导致如RecycleView这种高性能列表组件无法使用。动画实现也不理想。
- Flutter理论优势
- Flutter继承了RN衣钵,但更进一步。它自己实现了UI引擎,从而真的可以是write once,run anywhere,是的,除了iOS,android,它还能写前端页面,Google未来融合Chromebook和Android的Fuchsia系统是运行Flutter app的。
- Dev友好,开发是Jit模式,毫秒级hot reload,release是Aot,针对ABI优化编译成机器码,性能好
- Flutter引擎没有历史包袱,直接面向最新的Vulkan和Metal封装,渲染效率更高。升级没有依赖,引擎维护者也可以做更彻底的优化。
业务原因
- 公司业务战略调整,ME暂时没有高优先级的业务需求。正所谓天晴时修房顶,这时候重构项目是科学的。
- 可以还技术债,也可以提高小伙伴的专业技能,为后面可能到来的业务挑战做好准备。
重构目标
- 软件指标(帧数,内存,CPU)
- 帧数平均有10%提升
- 运行内存有10%下降
- 运行CPU有10%下降
- 业务指标(人天效能,稳定度)
- 人天效能(对比RN)有50%以上提升
- 核心模块高于50%的单元测试覆盖率
- 上线前人均Bug数不大于5,上线后Crash率小于0.05%
重构结果
业务表现
- 计划履行率
- 开发前有比较详细的任务分工,功能细化到人天,95%的story都能按期完成,开发过程可计划,可调控。
- 开发计划表:https://shimo.im/sheet/gsWNVfO3BpMN9bGS/yWUJN
- 人均效能
- RN的人天总数是3*(2018/8/23-2017/11/15)=843人天,
- Flutter是6(2018/11/30-2018/9/8)=498人天,提升大概是843/498 -1 = *69.2%**
- 单元测试
- 我们还实现了50%以上的单元测试覆盖率,此处会有截图(11/27前完成)