作者 / Yuqian Li & Shams Zakhour
高性能是 Flutter 的关键特性之一。我们希望通过本文着重分享在 2019 年下半年由整个 Flutter 社群实现的性能优化。(虽然 2020 年已经过去大半,但我们认为感谢开发者们做出的贡献虽晚不迟!)
当然,如果您在 2020 年帮助 Flutter 提升性能,您也将出现在未来的英雄榜中。我们希望通过分享这些成就,可以激励更多的开发者贡献能量!
我们尤其鼓励编写性能测试来量化性能上的提升,并防止该性能在未来出现倒退。因此,我们在含有量化结果的性能优化的详细说明中,会特别列出每个做出贡献的开发者。
以下是 2019 年下半年的 Flutter 性能汇总和量化结果分享,您可以在后文中阅读性能提升详细内容和贡献来源。
2019 年第 4 季度 (10 月 - 12 月)
已量化的改进
快速滚动浏览大型图像时,内存占用减少 70%
简单 iOS 动画的 CPU/GPU 占用降低 40%
41% 的光标性能加速
通过修复光栅缓存节流,将列表滚动速度提高 10%
缓存性能数据使得仪表板加载速度提高 37 倍
构建 APK 的速度提高至 2.3 倍
Flutter 引擎提交时记录的性能指标增加 103 个
应用大小缩减 20%
Dart FFI 性能提升了 108 倍
紧凑代码的性能提升 10% – 15%
通过新的增量序列化器将 flutter 测试速度提高了 2.2 倍
通过向 Dart VM JIT 提供内联提示将内核二进制序列化速度提高 10%
异步繁重代码的性能提升了 30%
其他改进
修复了在 iOS 上使用 PlatformView 时的内存泄漏问题
修复了在 iOS 上播放动画时的内存泄漏问题
修复了许多其它的 iOS 内存泄漏
已开始改造 flutter.dev 上的性能 (Performance) 页面并添加了有关衡量应用大小的操作说明
更正了第一帧等待逻辑和衡量
DevTools 添加了完整时间线模式,并支持异步和记录的追踪
IntelliJ 插件修复了 120FPS 支持
许多时间线追踪改进
2019 年第 3 季度 (7 月 - 9 月)
已量化的改进
矩形和点变换速度提升了 1.5–5 倍
iPhone X/Xs 滚动时丢失的帧数减少 N/2–1
通过并行初始化将引擎启动和关闭时间缩短 15%
着色器预热的启动速度加快 14.57 毫秒,内存使用量减少 8MB
代码大小缩减了 1.02%-8.04%
Flutter 在 Fuchsia 上的 FPS 提高多达 2 倍;改进了帧时间安排
已量化的回退修复
iOS 上 BackdropFilter 的速度提高 3 倍
其他改进
DevTools 支持各种显示刷新速率 (例如 60 FPS、120 FPS 等)
目前 VSCode 插件对项目的扫描是异步扫描,这应该会提升扩展程序激活速度并降低触发 VS Code "扩展导致高 CPU" 警告的几率
iPhone Xs 已被添加至 Flutter 设备实验室进行基准测试
详细说明
2019 年第 4 季度已量化的改进
快速滚动浏览大型图像时,内存占用减少 70%
PR 14265: 清理 IO 线程 GrContext
https://github.com/flutter/engine/pull/14265
PR 46184: 针对快速滚动大型图像的内存测试
https://github.com/flutter/flutter/pull/46184
仪表板: fast_scroll_large_images__memory 中位数差值减少了 70% (从 400MB 减少到 120MB)
https://flutter-dashboard.appspot.com/benchmarks.html
Issue 19558: 需要清理 IO 线程 GrContext 内存
https://github.com/flutter/flutter/issues/19558
贡献者: liyuqian、dnfield、chinmaygarde
https://github.com/liyuqian
https://github.com/dnfield
https://github.com/chinmaygarde
简单 iOS 动画的 CPU/GPU 占用降低 40%
PR 14104: 重新设计更简单的条件离屏渲染以实现屏幕读取支持
https://github.com/flutter/engine/pull/14104
PR 13976: 根据需求动态确定是否使用离屏表面
https://github.com/flutter/engine/pull/13976
PR 31865: iPhone 6 上的简单动画大量消耗 (约 20%) CPU/GPU/电量
https://github.com/flutter/flutter/issues/31865
simple_animation_perf_iphonexs 的 cpu_percentage 和 gpu_percentage 减少了 40% (从 23%-CPU-14%-GPU 减少到 13%-CPU-8.5%-GPU)
https://github.com/flutter/flutter/issues/31865#issuecomment-566268237
贡献者: flar、liyuqian、hixie、chinmaygarde
https://github.com/flar
http://github.com/liyuqian
https://github.com/hixie
http://github.com/chinmaygarde
41% 的光标性能加速
PR 46720: 传递 _caretPrototype 以防止缓存丢失
https://github.com/flutter/flutter/pull/46720
PR 46720: 第 90 百分位帧的构建时间缩短了 41% (从 6.709 毫秒缩短到 4.756 毫秒)
https://github.com/flutter/flutter/pull/46