gpt4 book ai didi

ios - Flutter iOS 动画在第一次运行时很卡顿

转载 作者:行者123 更新时间:2023-12-03 11:15:33 32 4
gpt4 key购买 nike

从 Flutter 1.12 开始(当 Flutter 从 OpenGL 切换到 Metal 渲染时),应用程序的首次运行出现卡顿(更频繁地跳帧)。
Flutter 团队是 working on this ,但同时我能做些什么呢?

最佳答案

在任何事情之前:确保您看到的卡顿确实与此问题有关。如果您的应用程序在 iOS 中的 OpenGL 后端已经卡顿,或者在 Android 上卡顿(实现了着色器缓存),您可能还有其他一些与性能相关的问题。尝试通过 performance profiling in Flutter - 即记录一些时间表并分析框架工作负载中发生的情况。
编辑 2/23/2021
金属二进制存档工作被证明是一条死胡同。见 https://github.com/flutter/engine/pull/23914更多细节。这仍然是 Flutter 团队的高优先级项目,但目前尚不清楚修复的时间表。
结束编辑
否则:

  • 看看你是否可以使用更简单的着色器。例如,避免 alpha 混合、避免梯度计算、避免昂贵的剪辑等。
  • 降级到 Flutter 1.12。
  • 这可能需要在您需要的其他修复中 cherry-pick 。
  • 这可能需要降级某些包,或向后移植 1.12 不可用的包。

  • 使用带有 OpenGL 的定制引擎。
  • 见说明 here .
  • 这几乎肯定会引入 regressions对于某些应用程序和/或设备。这些可能会或可能不会被您接受。 Flutter 团队不再支持 iOS 上的 OpenGL,并且对它的错误修复请求将被关闭,因为不会修复。

  • 等待实现 Metal 二进制存档。一旦发生这种情况,Shader Warmup将在 Metal/iOS 上受支持。 Flutter 和 Skia 团队正在积极开展这项工作(对它的基本支持已经到位,但还没有完全准备好用于一般用途)。我们的目标是在 2021 年初上市。

  • 一点背景:
    着色器是 Skia 从各种绘图命令创建的小程序,用于创建 GPU 可以执行以在屏幕上实际绘制像素的程序。编译它们可能会花费大量时间,并且不同的场景可能需要不同的着色器程序。 Flutter 的架构旨在缓存和重用已编译的着色器程序,以便在编译后可以重用它们。 Skia 中基于 OpenGL 的后端对此提供了支持,但仍在为基于 Metal 的后端开发中(参见 https://skbug.com/10804)。
    迁移到 Metal 有很多充分的理由。
  • Apple 正在弃用 OpenGL
  • 在 OpenGL 后端观察到与内存和帧速率相关的问题,这些问题正迅速成为死胡同。由于弃用,Apple 的分析和调试工具现在都面向 Metal。许多问题被观察到通过转向金属得到完全解决。
  • 相信已经实现了对 Metal 的核心支持。这包括基本渲染、跨上下文图像和平台 View 支持。不幸的是,这不包括对着色器缓存的支持。

  • 我们确实简要考虑了 supporting both OpenGL and Metal ,但决定不这样做。解决堆栈中该层错误的资源有限,我们已经意识到 Metal 解决了许多与性能相关的问题。

    关于ios - Flutter iOS 动画在第一次运行时很卡顿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65485696/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com