Flutter 2.5改进性能大幅减少应用程序卡顿

Google发布最新Flutter 2.5,这个新版本拥有大量更新,是目前Flutter发布以来第二大的版本,总共有252个贡献者,和216个程序代码审查者参与开发,整合3,932个拉取请求解决了4,600个问题。这些更新重点在于改进性能和工具,并且加入新功能,包括支持Android全面屏、Material You,还有在VS Code项目中加入相依项目等。

Flutter 2.5最受瞩目的更新,便是在性能方面的进展,特别是利用预热着色器的方式改善iOS上卡顿的情况,但官方提到,着色器冷启动并非卡顿的唯一原因,过去处理网络、文件系统、扩展组件和其他异步事件,都可能会中断动画,这是另一个卡顿的来源,在这个新版本中,开发团队改进UI隔离事件循环上的调度策略,使得影格处理的优先度高于其他异步事件,因此消除更多了卡顿情况。

另外,垃圾回收器暂停UI线程来回收内存,也是造成卡顿的原因之一,由于过去部分图像的内存采懒散回收方法,来回应Dart虚拟机所执行的垃圾回收工作,过去的解决办法,是Flutter引擎会向Dart虚拟机,暗示图像内存可以通过垃圾回收器回收,官方提到,虽然在理论上可以更即时地回收内存,但实际上由于太多主要垃圾回收工作,使得内存没办法更快回收,导致设备上内存不足,而Flutter 2.5改善了这个问题,现在图像内存会被迅速回收。

内存回收效率的改进,可以从垃圾回收次数下降观察,在官方的测试中,过去播放20秒GIF动画,需要400多次的垃圾回收,现在只需要4次,官方表示,更少的垃圾回收,减少消耗的CPU和电力,能够降低图像显示和消失动画的卡顿。

新版Flutter另一项性能改进,是Dart和Objective-C/Swift,以及Dart和Java/Kotlin之间发送消息的延迟,官方借由移除不必要的消息解码器副本,来降低50%以上的延迟,性能改进的幅度,取决于消息的大小和设备。

Flutter 2.5对框架进行了不少修复和改进,官方先从Android下手,修复一系列和全面屏模式相关的问题,并且增加对各种Android全面屏模式的支持,这影响系统UI覆盖层,像是状态栏和底部导航列的可见性,模式分别有lean back、immersive、immersive sticky以及edge to edge,该更新同时提供开发者在其他模式下,监听全面屏变更的方法,像是在用户与应用程序交互,当系统UI出现在,开发者便可以编写程序代码,以回到全面屏或是进行额外处理。

Flutter也更完整地支持Material You规范,包括浮动操作按钮大小,以及主题更新。在页面滚动方面则添加了滚动指标通知,即便用户没有进行滚动操作,也能够提供可滚动区域通知,让滚动条根据ListView底层大小,视情况出现或是消失。

现在Flutter 2.5支持在应用程序顶部,出现Material横幅,该横幅会一直显示直到用户关闭,由于Material指南规定,应用程序的横幅只能一次出现一个,因此该横幅功能会维护一个队列,在前一个横幅被关闭后,才会出现新的横幅。

在这个版本,适用于VS Code的Flutter扩展组件也获得更新,加入两个指令分别是,Dart: Add Dependency和Dart: Add Dev Dependency,让开发者可以简单地在项目中,添加相依项目。