2019 下半年 Flutter 实现的性能优化 | 英雄榜

本文总结了2019下半年Flutter社区在性能优化方面的成就,包括内存占用减少70%、CPU/GPU占用降低、光标性能提升41%等量化改进。同时,修复了多个内存泄漏问题,提升了构建速度和应用大小优化。文章还提到,通过DevTools和IntelliJ插件的改进,增强了开发者工具的功能。
摘要由CSDN通过智能技术生成

作者 / 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值