0x00.介绍-[Flutter]
Thu, Apr 26, 2018Flutter是一款由google开发的高质量、高效率的免费开源跨平台移动原生应用开发框架。
虽然FLutter尚未发布1.0版本(本文撰写时最新版本为0.2.8 beta2),但已引起了移动开发者的广泛关注,网上已经有不少对其进行介绍的文章,在此我们主要关注介绍中出现三个关键词:高质量、高效率、原生,需要了解更详细的信息可访问一下资源。
高质量:
Google作为一家在全球占据领导地位的IT公司,其对IT项目的管控完全可以让我们放心。
虽然还处于beta版本,但是google已经为Flutter提供了完善的组件及开发工具链。
- 完善的IDE支持
- 包管理机制
- 美观高效的自绘控件
- 方便的本地API调用支持
- 调试、测试支持
- 性能报告
- 跨平台支持(目前支持IOS、Android)
高效率
- 保留状态(Stateful)的热重载(Hot Reload)机制,提供纳秒级的页面重载支持。
与原生开发相比,跳过了修改-编译-部署-调试的流程,直接修改-重载,页面瞬间刷新,节省了编译-部署的时间。 与基于H5方案(含纯H5和混编方式)相比,H5方案也可以提供实时页面刷新功能,但由于需要整页刷新,难以保存页面的当前状态信息(对于H5的方案,之前做调研时接触过ionic和apicloud,但并未深入研究,这里可能存在一些错误),Flutter通过有状态组件(Stateful widget)可以在重载时保持页面当前状态。
- Flutter基于canvas直接绘制控件,性能远高于H5方案,原则上可以达到原生控件的性能。
对于H5页面的性能,很大程度上受限于平台Web View的实现,之前有个项目里有个H5的转盘抽奖页面,IOS下运行流畅、Android下始终都会有卡顿的现象,后来开了几个大厂的类似页面,也是一样的情况。 当然,H5的方案也在对性能进行最大程度的优化,如:引入虚拟滚动已优化大量数据滚动时卡顿的情况,对于多数以信息展示为主的App,H5的方案完全可以满足性能上的需求。
原生
关于“原生”,可能有人会问,你用的都不是原生控件怎么算原生应用呢?那么大家觉得手机王者算不算是原生应用呢?Flutter的形式比较接近游戏的处理方式,Flutter相当于游戏框架,在App和底层canvas和系统api间进行一层封装,为App提供同一的高性能跨平台接口。
最后对自绘控件再唠叨两句,自绘控件的方式有优势也有劣势,但我个人认为优势 > 劣势。
- 从框架实现角度来说,由于各平台原生控件的种类、属性、方法存在差异,映射到原生控件的方式无疑会增加取舍的难度,一种情况下框架设计者会选择最小集的方案,这样势必阉割掉一些优秀的特性,另一种方案是分成通用控件和平台特有控件,这样无疑增加了框架和应用开发者的工作量。
- 从使用者的角度,多平台一致的风格可以降低使用者的学习成本。 传统桌面端的跨平台UI方案有着比App端更长的历史,也经历了各种不同方案的尝试,从目前看,自绘方式是更加稳定可靠的方式。桌面端自绘方式最成功的框架应该就算C++系的QT和JAVA的swing,代表作吗,QT有金山的WPS、swing就是idea了。
参考资料