Flutter 2.8 的新特性
昨天北风摇曳,我们等来了flutter2.8的更新,看他的介绍,说是更快速、更高效,
Startup
该版本改进了应用的启动延迟问题,这个改进在 Google Pay 中进行了, Google Pay 作为一个主流的大型应用程序,代码超过 100 万行,使用它进行测试可以确保这些更改所产生的影响是可以被感知的。
所有这些改进使得 Google Pay 在低端 Android 设备上运行时的启动延迟降低了 50%,在高端设备上降低了 10%。
Flutter 通过影响 Dart VM 的垃圾收集策略的方式,可以有助于避免在应用启动期间出现不合时宜的 GC 。
例如在 Android 上渲染第一帧之前,Flutter 现在 只通知 Dart VM TRIM_LEVEL_RUNNING_CRITICAL 及以上的内存压力信号,在本地测试中,这个更改将低端设备上的第一帧时间减少了多达 300 毫秒。
出于严谨的考虑,在之前的版本中 Flutter 创建平台视图时会阻塞平台线程,这次通过详细的推理和测试 确定了可以删除一些序列化,这个改进消除了在低端设备上启动 Google Pay 期间超过 100 毫秒的阻塞。
另外,以前设置默认字体管理器时,会在设置第一个 Dart isolate 时添加人为的延迟,而延迟默认字体管理器 和 Dart Isolate 设置,这样既改善了启动延迟,又使上述优化的效果更加明显。
Memory
由于 Flutter 频繁地加载 Dart VM 的 “service isolate”,这部分 AOT 代码与应用程序捆绑在一起,因此 Flutter 会同时将这两者都读入内存,因此针对内存受限的设备, Flutter 开发人员在进行性能跟踪时遇到了问题。
在 2.8 版本中针对 Android 设备, Dart VM 的 service isolate 被拆分为可以单独加载的自己的包,这样的调整让设备可节省最多 40 MB 的内存。
通过 Dart VM informing the OS ,内存占用进一步减少了 10% ,AOT 程序使用的内存将可能不需要再次读取文件,因此,之前保存文件备份数据副本的页面可以被回收并用于其他用途。
Profiling
以便更好地了解应用程序中的性能问题,在应用程序启动时启用,2.8 版本现在会将跟踪事件发送到 Android systrace 记录器,即使 Flutter 应用程序构建在发布模式下也会发送这些事件。
此外为了创建更少卡顿的动画效果,开发者可能会想要更多关于光栅缓存行为的性能跟踪信息,因为这个行为对于 Flutter 来说是比较昂贵的,可以重复使用的图片进行 blit, 而不是在每一帧上重新绘制它们,在性能跟踪中的新事件流现在允许跟踪光栅缓存图片的生命周期。
Flutter DevTools
对于调试性能问题,该版本的 DevTools 添加了一个新的“Enhance Tracing”功能,它可以帮助开发者诊断因昂贵的构建、布局和绘制操作而导致的 UI 卡顿。
启用这些跟踪功能中的任何一个后,时间轴将包含用于构建的 Widget、布置的渲染对象和绘制渲染对象的新事件(视情况而定)。
此外该版本的 DevTools 增加了分析应用程序启动性能的支持,该配置文件包含从 Dart VM 初始化到第一个 Flutter 帧渲染的 CPU 样本。
在按下 “Profile app start up” 按钮并加载应用程序启动配置文件后,开发者将看到为配置文件选择的 “AppStartUp” 用户标签,另外还可以通过在可用用户标签列表中,选择此用户标签过滤器(如果有)来加载应用程序启动配置文件。
选择此标签会显示应用启动的配置文件数据。
Web platform views
Android 和 iOS 并不是唯一获得性能改进的平台,该版本还改进了 Flutter web 平台的性能。
Flutter Web 使用 HtmlElementView Widget 实现了这一点,它允许开发者在 Flutter Web 应用程序中托管 HTML 元素。
如果开发者使用的是 google_maps_flutter 插件或 video_player 插件的 web 版本,或者你已经遵循了 Flutter 团队关于如何优化网络上显示图像的建议,那么您其实已经在使用 platform views。
在之前版本的 Flutter 中,platform view 会立即创建一个新的画布,每个额外的平台视图都会添加另一个画布,可是创建额外的画布是很昂贵的,因为每个画布都是整个窗口的大小。
所以该版本会复用早期平台视图创建的画布,这意味着开发者可以在 HtmlElementView 的 Web 应用中拥有多个实例而不会降低性能,同时还可以减少使用平台视图时的滚动卡顿。
DartPad
DartPad 的改进,其中最大的改进是对更多包的支持,事实上现在有 23 个包可供导入,除了几个 Firebase 服务,该名单包含常用软件如 bloc
,characters
,collection
,google_fonts
,和 flutter_riverpod
,DartPad 团队会继续添加新的软件包,因此如果想查看当前支持哪些软件包,请单击右下角的信息图标。
还有另一个新的 DartPad 功能也非常方便。以前 DartPad 总是运行最新的稳定版本,在此版本中可以使用状态栏中的新频道菜单,来选择最新的 Beta 频道版本以及之前的稳定版本(称为“旧频道”)。
生态系统
Flutter 不仅仅是框架、引擎和工具——pub.dev 上有超过 20,000 个与 Flutter 兼容的包和插件,而且每天都在增加。Flutter 开发人员日常交互的大量内容是更大生态系统的一部分。
这可能是今年的最后一个版本,但谁又知道呢,所以你想尝试了吗?
可以在下面的链接获取到更多flutter相关的资讯。
文章涉及到的链接
官网链家:https://flutter.dev/
版本列表:https://flutter.cn/docs/development/tools/sdk/releases