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

Flutter SVG 图片加载速度提升 98% 的技巧

Flutter SVG 图片加载速度提升 98% 的技巧

提升 Flutter SVG 图片载入速度的有效方法

视频

https://youtu.be/0HYtX5c6oOw

https://www.bilibili.com/video/BV14ixXeJEKy/

前言

原文 Flutter SVG 图片加载速度提升 98% 的技巧

作为许多 Flutter 开发者中的一员,我最初在项目中依赖 flutter_svg 包来显示 SVG 资源。对于简单的图像,这种方式足够有效。不过,当我加入一个大量使用 SVG 的项目后,情况发生了变化。我们的应用程序在引入复杂 SVG 图形的介绍页面时,性能受到显著影响,渲染这些复杂图形时出现了明显的延迟。在资源较少的移动设备上,这一问题更为突出,导致用户体验变得令人沮丧。

在寻找解决方案的过程中,我发现了一个名为 vector_graphic_compiler 的工具。这个工具通过在编译时而非运行时渲染 SVG,提供了一种理想的解决方案。使用矢量图形编译器后,SVG 会在构建阶段进行预编译,从而大幅提升渲染性能,并消除了对 flutter_svg 的依赖。

在 Flutter 3.22 引入使用 Dart 包进行资源转换之前,开发者需要手动使用矢量编译器来处理 SVG 资源。这一过程包括将 SVG 转换为可使用的格式,包含在项目中,并管理不同平台或屏幕尺寸的兼容性——这一切都相当耗时。然而,随着资源转换功能的出现,Flutter 现在提供了一种更简化和自动化的处理矢量图形的方法,使开发者能够更多地专注于应用程序的开发,而减少了手动管理资源的时间。

在本文中,我将分享如何迁移到 vector_graphic_compiler 不仅解决了我们的性能问题,还显著提升了应用程序的整体效率。

Flutter SVG 性能优化

本文 Flutter 版本

❯ flutter --versionFlutter 3.22.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision b0850beeb2 (3 个月前) • 2024-07-16 21:43:41 -0700
Engine • revision 235db911ba
Tools • Dart 3.4.4 • DevTools 2.34.3

参考

  • https://pub.dev/packages/vector_graphics_compiler
  • https://pub.dev/packages/vector_graphics

什么是 SVG?

SVG(可缩放矢量图形,Scalable Vector Graphics)是一种基于 XML 的图形文件格式,用于描述二维图形。SVG 允许创建可缩放的图像,这意味着无论在多大尺寸下,图像都不会失去清晰度和质量。SVG 文件可以包含路径、形状、文本和其他图形元素,并且支持样式和动画。

SVG 的特点:

  1. 可缩放:由于是矢量图形,SVG 可以在不同的分辨率和尺寸下保持清晰。
  2. 文本格式:SVG 文件是文本可读的,便于编辑和修改。
  3. 交互性:SVG 支持 JavaScript 和 CSS,可以实现动态效果和交互。
  4. 小文件大小:相对于位图图像,SVG 文件通常更小,便于网络传输。
  5. 支持透明度:SVG 可以处理透明度和渐变效果,使得图形更加丰富。

步骤

准备 SVG 图片

assets/svg/security.svg

包依赖

pubspec.yaml

vector_graphics 组件,vector_graphics_compiler 预编译转化

dependencies:# 显示矢量svg组件vector_graphics: ^1.1.11+1dev_dependencies:# 预编译转换 svg 到 vectorvector_graphics_compiler: ^1.1.11+1

资源文件

flutter:assets:- path: assets/svg/transformers:- package: vector_graphics_compiler

页面调用

VectorGraphic 组件 loader 属性,通过 AssetBytesLoader 方式导入 svg 资源。

import 'package:vector_graphics/vector_graphics.dart';VectorGraphic(loader: AssetBytesLoader("assets/svg/security.svg"),width: 300,height: 300,),

VectorGraphic

性能比较

基准对比

运行毫秒

运行帧数

预渲染时间

devtools 性能对比

“使用 flutter_svg 渲染 svg 花费了 23.5 毫秒,帧率为 58 FPS,占总栅格化时间的 58.41%。”

flutter_svg花费

“使用 vector-compiler 渲染 svg 在 60 FPS 下耗时 0.4 毫秒,占总光栅化时间的 3.96%。”

vector-compiler渲染

代码

本文配套代码

小结

在本文中,我们探讨了提升 Flutter SVG 图片载入速度的有效方法。通过优化策略和技巧,开发者可以实现高达 98% 的加载速度提升,从而显著改善应用性能。希望这些建议能帮助你在 Flutter 开发中更高效地使用 SVG 图片,提升用户体验。

感谢阅读本文

如果有什么建议,请在评论中让我知道。我很乐意改进。


猫哥 APP

  • SaaS Fast
  • Flutter GetX Generator

flutter 学习路径

  • Flutter 优秀插件推荐
  • Flutter 基础篇1 - Dart 语言学习
  • Flutter 基础篇2 - 快速上手
  • Flutter 实战1 - Getx Woo 电商APP
  • Flutter 实战2 - 上架指南 Apple Store、Google Play
  • Flutter 基础篇3 - 仿微信朋友圈
  • Flutter 实战3 - 腾讯即时通讯 第一篇
  • Flutter 实战4 - 腾讯即时通讯 第二篇

© 猫哥
ducafecat.com

end


http://www.mrgr.cn/news/51742.html

相关文章:

  • MinIO配置与使用
  • 如何在 JavaScript 项目中限制Node.js版本
  • QOwnNotes:开源界的黑马,专业人士的不二之选
  • mysql用户管理(user表列信息介绍,本质,管理操作),数据库的权限管理(权限列表,权限操作)
  • 探索人工智能在数学教育上的应用——使用大规模语言模型解决数学问题的潜力和挑战
  • 深度学习 %matplotlib inline
  • 微服务的特点
  • mysql学习教程,从入门到精通,sql序列使用(45)
  • 单细胞copyKat分析学习和整理
  • 节流函数throttle和防抖函数debounce
  • 2024_E_100_TLV解码
  • 51单片机的智能水箱液位控制系统【proteus仿真+程序+报告+原理图+演示视频】
  • 新乡医学院第一附属医院启动巨额医疗设备整体维保招标
  • linux证明变量扩展在路径名扩展之前执行
  • 个人主页模版(源代码开源)
  • 值得推荐的五款数据恢复工具!!
  • MySQL之CRUD(上)
  • Shiro认证(Authentication)
  • 【Spring】Spring实现加法计算器和用户登录
  • conda环境打包环境、迁移环境