8 篇文章,再学不会 Flutter 你来打我!(flutter 书籍)

8 篇文章,再学不会 Flutter 你来打我!今天这篇文章的作者是:Xiasm,主要讲述Flutter和原生APP的性能对比,下面是正文。
前言
自从今年google IO大会推出flutte

今天这篇文章的作者是Xiasm,主要讲的是Flutter和原生APP的性能对比。

前言

自今年Google IO 大会上公布Flutter 跨平台开发框架以来,Flutter 一直是各个技术论坛的热门话题。 Flutter团队公开表示,Flutter帮助开发者轻松实现恒定60fps的性能体验。 Flutter的跨平台原理是,它使用Dart语言预编译来直接编译各个平台的原生代码,而不必使用RN等JavaScript桥来运行我已经知道的原生代码。那么它的性能如何呢?能达到原生一样的流畅度吗?能否达到官方所说的恒定60fps的性能体验呢?今天我们就以Android为例,从几个不同的方面来实际测试一下。

安装包对比

我们使用Flutter和Android原生创建UI效果完全相同的APK,并且仅部署第三方库以确保我们测试结果的可靠性。使用框架提供的控件创建一些简单的UI。这里附上demo源码:Flutter demo、Android demo。接下来,输入每个发布版本的APK 并使用Android Studio 附带的APK 分析器进行分析,如下所示。

安卓原生APK

颤动apk

从apk大小我们可以明显看出原生安装包比Flutter安装包小6M左右。

Size of Classes.dex 查看dex的大小。原生的classes.dex比flutter版本的dex大600多KB。这是因为原生dex引入了支持库和各种基础控件(ImageView)。 TextView等),flutter的dex没有支持库或原生控件。事实上,flutter 实现了自己的一套控件,包括Material Design 和Cupertino(iOS 风格的小部件)。

对比res,可以看到原生资源文件比flutter资源文件多了200K左右。但是,由于您还没有向项目中写入任何资源文件,因此大多数资源文件都附带支持包和SDK。

Lib 库如果您打开Flutter 版本的应用程序,您将看到libflutter.so。由于Flutter引擎是用C和C++编写的,因此在Android上使用ndk编译。使用iOS LLVM编译,我们自己编写的dart代码通过AOT编译为各个平台的原生代码。

通过对比,我发现flutter版本的apk大小比原生Android大了6M左右。其中,核心引擎约3.2MB,框架+应用代码约1.25MB,所需的Java code.dex约1.5MB。 60k,资产文件中还有大约2.1MB的ICU数据。 Native比flutter好仅仅是因为安装包。

运行性能测试

为了提供更完整的测试覆盖率,请分别在调试模式和发布模式下执行性能测试。根据官方介绍,Flutter 的debug 模式的性能略低于Release 版本,因此在Profile 模式下编译和启动Flutter 应用程序与在Release 模式下几乎相同。首先我们看一下Android原生调试和Flutter的profile模式的性能对比。我们将使用Android Profiler 来发现性能指标。该demo只有一个界面,使用ListView显示10000条数据。参见下图。

Android原生调试性能检测图

Flutter Profile性能检测图

CPU资源使用情况首先,我们看一下启动时的CPU使用情况。 Android 的峰值CPU 使用率为26.8%,变化几乎平滑,而Flutter 的峰值CPU 使用率要高得多,达到35.5%。 Android原生CPU资源使用峰值在23%左右,而Flutter峰值使用在22.5%左右。图中还显示,Flutter 的CPU 资源使用率突然变得非常高,而Android 的使用率则保持相对稳定。

内存占用和内存占用的表现非常相似,Android在启动时占用内存高达58.1MB,但是在滑动列表视图时两者的表现非常稳定,突然之间内存就不会增加了。内存使用情况。一旦达到稳定状态,Android 的本机内存使用量稳定在35 MB,而Flutter 的内存使用量为52.5 MB。

如果您仍然担心调试和配置文件模式性能测试,下面我们打包了一个使用Flutter 和Android 原生构建的发布APK,以便您可以使用Android Profiler 来发现这两个。处理版本并运行性能测试。参见下图。

Android原生性能测试图Flutter性能测试图

打开应用程序并锁定当前进程后,我在第10 秒左右轻轻地将手指滑过ListView。我们来分析一下这两种方法的资源使用情况。

CPU资源占用首先,正常情况下,两者都不会消耗太多CPU资源,但原生版本使用了大约7.7%的CPU资源。部分CPU资源,峰值约为18.8%。

内存使用情况:原生应用的内存使用量保持在12M左右,而flutter版本的内存使用量保持在21M左右。原生应用内存使用量比flutter的内存使用量低约9M。

从以上两种模式的性能测试结果分析,我们可以得出结论:flutter应用比原生方法占用更多的CPU和内存资源。所以,纯粹从性能角度来说,Android原生肯定比flutter要好。在用户体验上,两者的滑动同样流畅,几乎没有差别。

应用启动对比

启动次数是衡量应用程序性能的关键指标。首先,我们使用GIF来演示在Android和Flutter版本上启动应用程序的体验。

可以看到,Android 版本和Flutter 版本在启动体验方面几乎完全相同。这里如果我大胆猜测一下,flutter app的启动机制和native是一模一样的,所以当你调用它来启动一个Application时,就会创建一个ActivityThread,最后执行Application的onCreate方法,所以启动时几乎是一样的。下面我贴出Android原生版本和flutter版本的启动trans文件。

Android 原生传输文件

![](https://user-gold-cdn.xitu.io/2018/12/20/167c99547d4b275c?imageVie

w2/0/w/1280/h/960/ignore-error/1) 颤振传输文件

传输文件几乎是一样的,我一度以为自己搞错了,但仔细检查后,我发现启动过程和flutter版本一模一样。原来的那个。

flutter 60帧/秒的刷新率测试

Flutter官方表示,其设计目的是提供每秒60帧的刷新率。 60 fps 意味着平均每16 毫秒渲染一帧。当UI 无法流畅渲染时,就会发生丢帧。例如,如果一帧中进行的处理过多,需要160 毫秒才能渲染,则在此期间帧将会丢失,并且动画将显示明显的抖动。您无法在Flutter 发布版本中测试渲染索引。我们继续以profile 模式运行,并使用官方提供的Flutter Inspector 工具查看fps 变化。看看下面的GIF。

我的手机是小米Note 2,搭载高通骁龙821处理器和4G内存。其性能在Android阵营中恐怕是顶尖的。打开应用程序后,先平滑地滑动列表视图,然后快速滑动。从照片中可以看到,刷新率最初恒定在60fps,即使快速滑动,刷新率也保持在58 到59 之间。你还是可以相信flutter官方所说的恒定60fps。

总结

通过上面的分析,我们可以清楚地得出Android的原生内存和CPU资源占用率比Flutter要低,安装包大小也比Flutter小。因此,纯粹根据性能来判断,而不考虑其他因素。也就是说,Android 原生肯定比Flutter 更好。但Flutter 还有其他好处,比如跨平台开发、毫秒级热重载等等。而且跨端开发也逐渐流行起来,所以你也应该在原生学习Android的基础上拥抱跨端开发。完成开发。

参考

flutter中文网站:https://flutterchina.clubflutter 官方网站:https://flutter.io

推荐阅读:当Dagger2到ViewModel时,我对程序员35岁门槛的看法,以及如何与HR竞争。

欢迎来到编程/思考/职场扫描二维码关注我们

最后

多年来,编辑了解到,大多数入门级和中级Android工程师想要提高自己,往往必须自己探索和成长,这是不系统的、短暂的,我了解到这并没有帮助。

因此,我们收集整理了《2024年Android移动开发全套学习资料》册。最初的目的也很简单。换句话说,我们想帮助那些想学习、提高自己,但不知道从哪里开始的朋友。

由于文件较多,这里仅展示部分目录截图。这套完整的内容包括对领先制造商的采访、学习笔记、源代码讲义、实践项目、概述路线、电子书和教学视频。它将继续更新。

一个人可以走得快,但一群人可以走得更远。无论是IT行业的资深人士还是对IT行业感兴趣的新人。

欢迎任何人加入我们的圈子(技术交流、学习资源、职场投诉、大公司内部推荐、面试指导),让我们一起学习、成长!

如果您需要此信息,请从第 栏中获取。

走得更远!无论是IT行业的资深人士还是对IT行业感兴趣的新人。

欢迎任何人加入我们的圈子(技术交流、学习资源、职场投诉、大公司内部推荐、面试指导),让我们一起学习、成长!

如果您需要此信息,请从第 栏中获取。

#以上8篇文章,如果你不想再学习Flutter,请联系我。相关内容来源网络仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91866.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月24日 上午1:02
下一篇 2024年6月24日 上午1:19

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注