转载

iOS原生 VS Flutter评测

iOS原生 VS Flutter评测

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

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

1.安装包大小

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

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

iOS原生 VS Flutter评测

iOS原生应用安装包和安装后容量

iOS原生 VS Flutter评测

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

iOS原生 VS Flutter评测

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

2.启动速度

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

iOS原生 VS Flutter评测

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

3.内存占用

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

iOS原生 VS Flutter评测

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

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

4.流畅度

从框架一出现,60FPS似乎始终贯穿于各大Flutter的介绍和分析文章中, 这让我们对Flutter的流畅度非常期待.然而:

iOS原生 VS Flutter评测

iOS原生 VS Flutter评测

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

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

5.iOS特性支持

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

iOS原生 VS Flutter评测

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

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

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

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

正文到此结束
Loading...