Flutter应用程序缓慢

2nc8po8w  于 2023-03-19  发布在  Flutter
关注(0)|答案(9)|浏览(256)

我正在试用Flutter,我的应用在模拟器和真实的设备上的响应都非常非常慢。
跳过了51帧!应用程序可能在其主线程上做了太多的工作。
我知道Dart是一种单线程编程语言,在Android中,我曾经用new Thread();块来解决这个问题。我正在尝试在Flutter中应用相同的方法,我阅读了Futureawaitasync和排序,但示例似乎解决了从互联网读取数据的问题。我的应用程序在现阶段不会在线读取任何内容,当我的屏幕有进度对话框时,当我打开一个新屏幕/页面时,以及应用程序上的每个动画时,我都会跳过x帧。以下是我遇到问题的类的示例:

_buildContent(){
    return new Column(
      crossAxisAlignment: CrossAxisAlignment.center,
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        new InkWell(
          onTap: (){
            Navigator.push(context, new MaterialPageRoute(builder:
                (context) => new LoginScreen()));
          },
          child: new Container(
            height: 150.0,
            width: 150.0,
            child: new Image.asset("images/logo.png", fit: BoxFit.cover,),
          ),
        ),
        new Container(
          margin: const EdgeInsets.all(16.0),
          child: new CircularProgressIndicator(
              value: null,
              strokeWidth: 1.0,
              valueColor: new AlwaysStoppedAnimation<Color>(
                  Colors.white
              )
          ),
        )
      ],
    );
  }

我假设跳过x帧的警告是由进度对话框引起的?我有另一个屏幕(登录屏幕),当打开时,它会将小部件动画到适当的位置,动画移动得很慢,我可以从字面上看到每一帧正在渲染。是否有在线教程可以帮助解决这个问题,或者只是理解Dart的异步编程?

deyfvvtc

deyfvvtc1#

debugging 模式

  • 发射缓慢
  • 启动时 Flink
  • 应用程序大小过大。

因为调试模式具有热重新加载。
当你创建发布apk https://flutter.io/docs/deployment/android
你可以找到

  • 快速发射
  • 发射过程中不 Flink
  • 应用程序大小小(但比正常的Android应用程序大)
    编辑

https://flutter.io/docs/testing/ui-performance#debug-flags
调试模式启用附加检查(如Assert),这些检查可能代价高昂。调试模式也以不同于发布模式的方式执行代码。调试构建“及时”编译Dart代码(JIT),但配置文件和发布版本会预编译为本机指令(也称为“提前”,或AOT)在应用程序加载到设备之前。JIT会导致应用程序暂停进行JIT编译,这本身就会导致Jank。
https://github.com/flutter/flutter/wiki/Flutter%27s-modes
设备上的调试模式(包括模拟器、仿真器):打开世界上所有的Assert,包括所有的调试信息,启用所有的调试器辅助工具(如observation)和服务扩展。为快速开发/运行周期优化。不为执行速度、二进制大小或部署优化。由flutter run使用。用sky/tools/gn --android或sky/tools/gn --ios构建。有时也称为“检查模式”或“慢模式”。

uxh89sit

uxh89sit2#

尝试在终端中使用flutter run --release在发布模式下运行您的应用。

l3zydbqr

l3zydbqr3#

调试版本有一些性能问题,因为许多Assert和其他验证发生在发布版本中。发布版本比调试版本快得多。
在发布版本中运行应用可能会有所帮助。请尝试在发布模式中运行

flutter run --release
83qze16e

83qze16e4#

你应该看一下Flutter performance Profiling指南。你可以尝试不同的配置来诊断你的问题是否在

  • 平台螺纹
  • UI线程
  • GPU线程或
  • I/O线程。

即使您的Dart代码只是在Ui线程中运行,它也会影响其他线程。

zzwlnbp8

zzwlnbp85#

在flutter中有一个已知的问题,你必须先“预热”图形API(SkSL)。在第三次运行后,通常动画会变得平滑。
这个问题发生在iOS和Android.
对于iSO来说,由于苹果放弃了对OpenGL的支持,这通常是skia图形引擎的实现方式,因此金属API通常会出现滞后。
变通方法和临时解决方案可在此页面上找到。
Extreme jank on iOS/Android the first time any kind of animation or transition runs (release build) - skia shader compilation #61450

iswrvxsc

iswrvxsc6#

iOS模拟器

如果您在Xcode模拟器中的特定(较新)设备上遇到速度慢、FPS低、滚动滞后的问题,这是因为Apple不再支持OpenGL,而且Flutter SDK不支持模拟器中的新Metal API
但官方稳定的支持将很快提供,直到那如果你需要60 FPS,切换到Flutter SDK的主通道运行这在终端和重建你的应用:

flutter channel master

资料来源:
iOS Simulator gradually becomes very slow & unusable
Investigate enabling Metal on iOS simulators above version 13.0.
Flutter会在iOS模拟器上使用Metal吗?

rkttyhzu

rkttyhzu7#

我的应用在一些安卓设备上运行缓慢,可能对其他设备也有一些性能影响。罪魁祸首是图像资产。在提供正确的图像大小后,

mdpi = 1x
hdpi = 1.5x
xhdpi = 2.0x
xxhdpi = 3.0x
xxxhdpi = 4.0x

到我的assets文件夹并更新pubspec.yaml,性能变得更好,

assets:

- assets/images/
- assets/images/1.5x/
- assets/images/2.0x/
- assets/images/3.0x/
- assets/images/4.0x/
c9x0cxw0

c9x0cxw08#

如果您在Profile模式下检查后仍然发现速度缓慢,这里有一个新的解决方案:https://github.com/fzyzcjy/flutter_smooth .
简而言之,你的应用程序将是~ 60 FPS的流畅,即使它的构建/布局可以任意慢。如何使用它和它是如何实现的可以在文档中找到。
免责声明:我做了那个库。

g6baxovj

g6baxovj9#

如果你正在体验滞后的iOS模拟器,对我来说唯一的解决方案是创建iPhone SE。然后它开始像以前一样流畅地工作。

相关问题