You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter默认启动页加载过慢问题求助(已配置Flavor)

Flutter启动页加载缓慢问题排查与优化方案

核心问题分析

从你提供的main_dev.dart代码来看,启动阶段的串行异步初始化操作是导致启动页耗时过长的主要原因:

  • Firebase.initializeApp()、MobileAds.instance.initialize()、FirebaseMessaging.instance.getToken()等操作均为串行await执行,总耗时等于各操作耗时之和
  • _initConfig()中的RemoteConfig同步拉取逻辑也会阻塞启动流程

具体优化方案

1. 并行执行异步初始化任务

将多个独立的异步初始化操作合并为并行执行,大幅减少总耗时:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 并行执行多个异步任务,总耗时取最长任务的耗时
  await Future.wait([
    Firebase.initializeApp(),
    // 若广告非启动必需,可移至后续环节
    MobileAds.instance.initialize(),
    _initConfig(),
  ]);

  FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
  
  // FCM Token改为异步非阻塞获取,不卡启动
  FirebaseMessaging.instance.getToken().then((fcmToken) {
    if (fcmToken != null) {
      // 通过状态管理工具(如Provider)或StatefulWidget更新全局配置
    }
  });

  FirebaseMessaging.onMessageOpenedApp.listen(
      (RemoteMessage message) => {print('onMessageOpenedApp $message')});
  
  // 无需等待FCM Token,直接启动App
  var configuredApp = AppConfig(
    appDisplayName: "dev Config",
    fcmToken: "", // 初始占位,后续更新
    baseUrl: 'https://dev-services.ducoinsure.com/',
    appInternalId: 1,
    child: const MyHomepage(),
  );
  
  mainCommon();
  runApp(configuredApp);
}

Future<void> _initConfig() async {
  await _remoteConfig.setConfigSettings(RemoteConfigSettings(
    fetchTimeout: const Duration(seconds: 1),
    // 延长缓存间隔,减少启动时的网络请求
    minimumFetchInterval: const Duration(hours: 1),
  ));
  
  // 后台异步拉取配置,不阻塞启动流程
  _remoteConfig.fetchAndActivate().catchError((e) {
    // 拉取失败时直接使用本地缓存配置
  });
}

2. 延迟非核心初始化操作

将非启动必需的操作延迟到App启动后执行:

  • 广告初始化可迁移至MyHomepage的initState方法中
  • RemoteConfig的拉取逻辑改为后台异步执行,启动时优先使用本地缓存

3. 优化FCM Token获取流程

FCM Token无需在启动阶段同步获取:

  • 先用空值或占位符启动App
  • 获取到Token后通过状态管理工具更新全局配置,或直接触发相关业务逻辑

4. 检查Flavor资源加载

确保不同Flavor的资源无冗余加载:

  • 检查android/app/src和ios/Runner下各Flavor目录的启动图、配置文件是否精简
  • 避免不同Flavor之间重复引入不必要的依赖库

额外建议

  • 使用Flutter DevTools的Performance面板分析启动阶段的耗时任务,精准定位阻塞点
  • 切换至release模式测试启动速度(debug模式会额外加载调试资源,影响启动效率)

内容的提问来源于stack exchange,提问作者Mari Selvan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:20:38