你应该知道的Flutter

公司有团队最近在作一个语音房app,ui层面使用flutter实现,在初版完成之际作了一次分享。作一下会议笔记,备忘。git

文件名命名规范

因为是第一次作flutter项目,加上团队小伙伴开发经验不是很足,在知足需求的同时,对其余以外的事情考虑的比较少,每一个人在建立dart文件的时候考虑的比较少,固然取名字也是一个很专业的事情,好的名字决定了app的一辈子。github

好比登陆页面,login.dart这样简单粗暴,可是要是登陆涉及到一些校验,须要弹窗,或者输入验证码,或者第三方登陆,或者手机号登陆,密码登陆,另外又有封禁等,难到这些都怼到一个文件内部吗,那login就不能知足要求了,须要拆分login的其余模块,在这一块的考虑不是很周全。redux

内存问题

flutter启动就有一百兆的内存,业内也有一些解决方案能够部分下降内存,可是也会有崩溃的风险,这是engine内部实现的问题。缓存

图片加载内存过大,这是开发不当心把几张3M+的图片放进去,内存就暴涨,猜其内部实现没有对Image的图片缓存作大小的如今,好比UIImage内部在图片占用内存达到100M的时候会自动回收一部份内存,使用方式也能够根据path加载路径,这样加载完就释放了。这个问题开发其实也是可控的。app

包体大小

flutter的engine默认加进来就多10兆+的大小,问题说大不大说小不小,由于是海外项目,国外不少低端机型,这个engine的大小又是不可避免的,至少在领导看来是应该须要解决的。虽然不少开发不情愿。iphone

日志分类

在原生开发的项目到了必定的复杂程度,日志分析必不可少,然而日志的产生就是编写代码的时候本身加上去的,为了给往后分析线上问题提供惟一的途径。工具

日志分类在flutter内部几乎是没有规划,尤为对于小项目。目前flutter的日志都是和原生的日志混在一块儿,若是项目作大,将来跟踪线上问题确定麻烦事情。 简单说flutter日志应该单独放在一个文件里面。性能

格式还和原生格式相似 时间+文件名+行号+方法名+tag+log内容ui

崩溃收集

flutter崩溃不一样于原生,不会crash,可是会白屏或者一片红,致使用户不得不杀进程才能操做。目前市面有这样的崩溃分析系统,可是不符合公司标准。公司但愿统一一套标准,崩溃自动上报到公司内部崩溃系统,带上堆栈信息,另外能够一键提bug指定给对应的人。 游离于公司系统以外,毕竟在项目管理层面来讲不是个好消息。日志

性能问题fps、cpu、gpu、耗电量

都是流畅性,跨平台是flutter的优势。

可是也是仅此而已吧,不用太吹嘘,这些是陈词滥调,可是它的cpu,gpu,耗电量对于简单的app来讲固然没什么问题,可是涉及到音视频这些项目,原生来讲都是个问题,对于flutter更是问题,问题不在于语言,而在于分析的工具侧不完善,performance是个不错的选择,可是用惯了原生性能检测的如instrument这种来讲就会以为flutter的很弱了。

举一个痛点问题,音频上麦,在iphonex 半个小时耗电35%,在flutter上麦怎么查。 鸡贼的办法就是丢给sdk去查了。若是之后这些sdk模块用flutter写了,又怎么查。

事件通知处理方式混乱

eventbus和stream均可以处理事件发送接收问题。每一个人也有本身的方式,这个在以前没有一个统一的规范写法,致使混乱。跨模块问题目前在flutter方向有一些好的解决方案,如闲鱼的 fish redux

跨模块封装问题

flutter代码多了,须要考虑重用问题,沉淀一些东西出来,封装和跨模块,解耦是终极问题,其实和语言已经不要紧了,借鉴行业经验,解耦就是须要抽象再抽象,思路不同,写法不同。插拔模式思路,应该就抽象出组件,提供注册的方法,提供反注册的方法,再提供一个取的方法。每一个模块遵循一些协议。

其余项目和sdk的flutter计划

一个音视频的sdk不必定仅仅是这个sdk,它其实也依赖了其余的sdk,如日志,统计,人脸识别,还有其余第三方的。固然所有要用flutter是不现实的。目前来讲,公司是有意愿部分通用的慢慢flutter化,可是过程会很漫长效果也不会理想。

然而对于新的app,使用flutter是没有悬念的事情,从成本上面来讲这是个优点,另外一方面性能上面不损失,就至关于花更少的钱办了一样的事情。固然乐见其成。

后续计划

为了在性能上面不损失,不能依赖flutter作ui这些表层的事情了。必须再深刻下去,减小包体,下降内存,提升cpu使用效率等等。

做者


共田君
相关文章
相关标签/搜索