iOS原生 VS Flutter评测

本人以前分别尝试用iOS原生和Flutter写了同一个小应用, 一个空气质量查询App, 名字叫Aireport, 目前已经分别上架了App Store.

Aireport(iOS原生)swift

Aireport Flutter(Flutter版)app

Aireport本来是我本身在用, 可是在初步学习了Flutter后我决定用Flutter最大限度的去模仿iOS原生版的应用, 以评估Flutter是否有能力作到以假乱真的地步. 咱们在上一篇文章中已经探讨了Flutter在开发中可能遇到的问题, 这篇文章咱们将着重放在二者用户在实际体验中的差距.框架

1.安装包大小

安装包大小决定了用户等待下载的时间和可能会耗费的流量, 即使是即将迈入5G时代的今天, 咱们依然须要尽可能优化应用安装的大小.post

Flutter应用安装包和安装后容量 性能

iOS原生应用安装包和安装后容量
虽然Flutter的结果我多少可以猜到, 但安装包9倍, 磁盘占用4倍的差距仍是让我感到失望, 况且若是我使用OC开发的话安装包还能进一步缩小(WWDC有可能将swift设为稳定版嵌入iOS系统内核, 届时swift版将有望自动瘦身).

因为项目很小就百行代码, 所以这30MB的空间占用基本就是Flutter的SDK容量.30MB的空间对于一款App来讲已是一个不小的数字, 并且应用之间不能共享SDK, 有几个Flutter应用就会有几个Flutter SDK. 这让技术团队在选择开发框架时不得不着重考虑一下从此App的容量问题.

2.启动速度

上面的应用容量除了影响磁盘占用外, 对启动速度也会有影响. 我在iPhone X上实测了一下, iOS原生应用的冷启动速度大概是在0.4秒左右, 而Flutter的冷启动速度在1.5秒左右. 学习

毫无心外iOS这一局又占上风. Flutter的启动过程首先会去跑完完整的iOS原生应用的全部流程直至第一个ViewController实例化后,再由VC去调用加载Flutter SDK, 初始化Flutter的运行时环境. 也就是说Flutter应用的启动时间=iOS原生应用的启动时间+Flutter环境的启动时间. 用户对于应用的容量占用几乎很难察觉, 可是应用的启动时间对用户体验的影响绝对是致命的(虽然如今的启屏广告已经彻底不考虑用户体验了). 在这一点上不知道日后Google团队还有没有优化的空间.

3.内存占用

内存占用一直是移动开发中的一个优化重点.不过目前来看Release版的Flutter在内存占用这一块也没有任何优点, SDK拖累是一方面, 单个页面内存占用也比原生多一倍. 优化

注意, 咱们知道Flutter在Build版本中的性能和Release是不同的, 同一个应用, Build版的内存占用在100M左右, 为了热加载我也是忍了.

内存占用不只影响着应用性能、电池损耗、 程序稳定性, 最重要可是, 内存占用越大, 被系统干掉后台的可能性就越大. 我本身的使用体验来看, iOS原生的Aireport基本上大部分时间都处于休眠状态, 而Flutter会在关闭不久后直接被系统干掉.ui

4.流畅度

从框架一出现,60FPS彷佛始终贯穿于各大Flutter的介绍和分析文章中, 这让咱们对Flutter的流畅度很是期待.然而:code

上面是iOS原生App的帧率, 下面是Flutter的帧率, 很明显这是一个尴尬的结果.Flutter应用在运行过程当中频繁出现了红色的警告, 这代表应用在这段时间没没有以60帧的速度完美渲染出页面.

这种帧率的差距也体如今了实际使用中. 不管是页面的切换, 仍是ListView的滚动, Flutter都仅仅能达到还算流畅的程度, 但明显还达不到iOS原生60帧的丝般顺滑. 固然, 目前的Flutter还处在Beta版, 并且我我的认为, 相对于安装包大小和启动速度, 运行时的流畅度更容易进行优化. 我相信Flutter将在以后的版本中进一步优化应用的流畅度, 达到与原生媲美的程度.cdn

5.iOS特性支持

iOS应用开发受益于强大的iOS系统和丰富的生态体系, 天生就具备大量实用且不可替代的特性, 例如Bitcode可以在云端自动优化咱们App的代码, 原生应用默认就支持增量更新、后台应用刷新等等.

很显然Apple赋予iOS应用的这些种种特性与Flutter应用是无缘的, 若是Flutter可以支持热更新的化那么其可用价值就高了许多. 但目前实现起来还有诸多问题, 包括部署、性能问题, 以及苹果对于热更新的谨慎态度.

综合了目前Flutter在开发中的体验以及和原生应用的比较, 我目前对Flutter的评估结果是: 再等等.

Flutter的确提供了一种不一样于目前其余跨平台开发框架的思路, 也极有可能成为将来跨平台开发的标杆. 若是你是我的开发, 我仍是建议你学习一下Flutter, 它的Dart语言、Wiget化、数据绑定、单向数据流等等现代特性值得你去了解. 同时对于没法同时掌握多个移动开发平台的小伙伴而言, 使用Flutter也是一种成本较为低廉的方法. 可是对于公司而言, Flutter还没法彻底投入生产环境, 并且初期Flutter的开发成本未必会低于原平生台.

目前Fuchsia的开发进度还不得而知, Flutter也还处在Beta3阶段. 相信等Fuchsia正式发布的时候才是检验Flutter正在实力的时候.

相关文章
相关标签/搜索