当前位置: 首页 > article >正文

FlutterWeb实战:02-加载体验优化

背景

默认情况下,Flutter 打包 web 以后,首次打开页面需要加载大量的资源,这就需要做首屏加载优化。

渲染引擎

通过分析,canvaskit 和 skwasm 需要加载较大的引擎包,很难优化,目前选择 3.22 版本,故选择 HTML Render 引擎

Flutter Web 计划在 2025 开始弃用 HTML Render。如果是 2025 年的新版本,可以考虑使用 skwasm 引擎。

字体图标裁剪

体积裁剪,通过 bulid apk shaking icon,得到一个裁剪后的字体库,替换调 Flutter Web 打包的对应字体产物

先在 App 项目构建 apk:

flutter build apk --tree-shake-icons

找到 build/host/intermediates/assets/release/mergeReleaseAssets/flutter_assets/fonts/MaterialIcons-Regular.otf
将该文档复制到 web/fonts/ 文件夹

文件采样 压缩前 压缩后 压缩率
MaterialIcons-Regular.otf 1.5M 2k 1%

延迟加载

使用延迟加载拆分文件,当前页面不需要的使用的代码延迟加载

Dart 中提供了 defered 关键词,用于延迟加载组件。

参考下方实现一个 DeferredWidget 组件

import 'dart:async';
import 'package:ealing_widget/common/common_color.dart';
import 'package:flutter/material.dart';

typedef LibraryLoader = Future<void> Function();
typedef DeferredWidgetBuilder = Widget Function();

///延迟加载组件
class DeferredWidget extends StatefulWidget {
   
  DeferredWidget(this.libraryLoader, this.createWidget, {
   Key? key, Widget? placeholder}) : placeholder = placeholder ?? Container(color: CommonColors.color_widget_background), super(key: key);

  final LibraryLoader libraryLoader;
  final DeferredWidgetBuilder createWidget;
  final Widget placeholder;
  // 存储 libraryLoader 对应的 future 数据
  static final Map<LibraryLoader, Future<void>> _moduleLoaders = {
   

http://www.kler.cn/a/538782.html

相关文章:

  • 详解SQLAlchemy的函数relationship
  • 活动预告 |【Part1】Microsoft Azure 在线技术公开课:基础知识
  • CNN 卷积神经网络处理图片任务 | PyTorch 深度学习实战
  • BiGRU双向门控循环单元多变量多步预测,光伏功率预测(Matlab完整源码和数据)
  • 基于微信小程序的医院预约挂号系统的设计与实现
  • 了解传输层TCP协议
  • Elasticsearch的使用场景、数据量级及选择原因?为什么没有用Hbase?
  • 按钮凸起与按下css效果
  • 番外02:前端八股文面试题-CSS篇
  • ZooKeeper作为注册中心有什么问题? ZooKeeper作为注册中心,海量服务同时重启有什么问题?
  • DeepSeek LLM 论文解读:相信长期主义开源理念可扩展大语言模型(DeepSeek 吹响通用人工智能的号角)
  • 使用LLaMA Factory踩坑记录
  • 基于PAI 低代码实现大语言模型微调和部署
  • python中的lambda function(ChatGPT回答)
  • 【算法刷题指南】二分查找
  • 电商java 面试题_JAVA电商项目面试题(一)
  • Windows图形界面(GUI)-QT-C/C++ - QT Dial
  • python连点器
  • 百度的冰桶算法
  • 未来十年的前端走向以及需要掌握什么技能
  • 搜维尔科技:提供人形机器人传感器的应用案例分析
  • 简单的Python记事本应用程序
  • 初次体验Tauri和Sycamore (2)
  • 使用 Apache Spark 进行大数据分析
  • c/c++蓝桥杯经典编程题100道(17)二叉树遍历
  • 网络安全 | F5 BIG-IP RESTful API 模块功能介绍