混合开发这项技术由来已久,目前市面上主流的有Hybird,ReactNative,Weex,Flutter等。其中,Flutter以他独有的实现方式,优秀的性能,成为近两年最火的混合开发方案,咱们学而思网校1v1客户端团队也是比较早的开始了Flutter技术的研究,在学而思网校1v1家长端和学而思网校1v1教师端两个App进行了大规模的实践尝试,由此也沉淀出了一套本身的混合方案DStack。android
为何要有混合方案?git
上述两种状况都存在native页面和flutter页面进行交互的行为,当两种页面进行交互,好比,混合页面之间随意跳转、 页面间数据传递、手势滑动、内存资源控制、路由管理,这些都是须要解决的问题,基于此,咱们参考了官方的解决方案,和阿里闲鱼团队的flutter_boost框架等,针对咱们的业务和工程的具体状况进行了DStack的方案选型和具体实现。github
DStack是什么?web
学而思网校1V1客户端团队自研的,基于节点进行管理的,使用简单,易于集成,性能优秀的混合开发框架。
目前框架已经在学而思网校家长端和教师端App上线,内存性能明显提高,稳定性表现良好。DStack也给Flutter社区提供了混合栈管理的新思路,改变了固有的移动研发模式。api
什么是混合栈?微信
当进行混合开发时,native页面和flutter页面依次打开时造成的栈结构,存在多种页面类型,如下图为例
蓝色方块NA表明native页面,橘色方块F表明flutter页面
DStack对标flutter_boost数据结构
咱们能够看到,页面栈结构存在native页面和flutter页面交替的状况,关于如何处理这种不一样页面间打开关闭的场景,目前flutter社区开源的此类框架只有flutter_boost,flutter_boost是阿里闲鱼团队自研的Flutter混合开发栈管理框架,该项目在github有3.9k的star。架构
那看到这儿可能会有疑问,既然社区有成熟的解决方案,咱们为何不用?主要有如下几点缘由,一是flutter_boost的实现原理不适用于咱们的纯Flutter工程,二是为了咱们团队后续的mac,ipad,pc端进行混合开发作准备,三是咱们对性能有很高要求,flutter_boost的实现方式决定了它没有利用flutter技术的特性,性能方面不够好。综上所述,咱们须要自研适用性更强的混合开发框架DStack。框架
怎么作?运维
1.基于“节点”进行混合栈管理
在DStack框架实现中,咱们把每一个native页面和flutter页面抽象成了“节点”数据结构,每一个页面对应一个节点,节点有页面的若干信息,经过节点这种数据结构,咱们就在实现底层屏蔽掉了页面的具体类型差别。
基于节点有什么好处?
NA表明native页面,F表明flutter页面,H表明Hybird页面。
由于咱们已经把不一样类型的页面抽象成了“节点”,因此后续若是除了flutter页面和native页面,咱们甚至还能够接入ReactNative页面或者Hybird页面。
2.肯定节点与页面行为的关系
图片中的pop表示返回上一个页面,popTo表示返回指定页面,popToRoot表示返回根页面,popSkip表示返回指定的模块,如图就是把“登陆”模块的全部页面都返回。
每一个页面返回和打开,都对应一次的节点记录,用户的行为触发节点管理,节点管理驱动页面跳转(即栈管理),考虑到Android和 iOS实现的差别性,节点管理放在了native侧处理。
3.设计使用简单的api
4.设计便于集成的框架接入方式
咱们已经把DStack作成了flutter侧的pub库,只须要在flutter工程直接引用依赖便可。
5.利用引擎复用,框架内存优秀
在flutter的1.12版本以后,咱们运用了flutter官方提供的flutter engin复用机制,作到了不一样的flutter控制器共享同一个flutter engin,内存性能优秀。
1.业务上
2.性能上
性能上咱们主要对比了flutter_boost框架,咱们能够看到不论是iOS侧仍是android侧,flutter_boost每打开一个新页面内存都会涨,而咱们的除非新打开flutter控制器会有内存消耗,其余状况内存数据很稳定。
这是android侧页面打开速度对比,咱们能够看到除非是新打开了flutter控制器时,flutter_boost和DStack的页面打开速度差很少相同,其余状况下DStack的页面打开速度明显优于flutter_boost。
3.功能上
这是DStack和官方方案与FlutterBoost在功能上的一些对比,Y表明有,N表明没有。
1.持续输出文章
这是DStack投稿的第一篇文章,只是简单介绍了一下框架,后续咱们会把详细的实现和采坑指南等持续的投稿,把咱们的技术共享给整个集团。
2.内部开源
咱们有计划把DStack在集团内部开源,也但愿获得其余事业部老师们的意见和建议。
3.外部开源
咱们有计划把DStack进行外部开源,回馈整个Flutter技术社区。
招聘信息
好将来技术团队正在热招测试、后台、运维、客户端等各个方向高级开发工程师岗位,你们可扫描下方二维码或微信搜索关注“好将来技术“,点击“技术招聘”栏目了解详情,欢迎感兴趣的伙伴加入咱们!