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.rhkb.cn/news/448463.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Djang学习- URL反转

代码中url书写规范&#xff1a; 、 url反向解析 urls: path(test/url, views.test_url),path(test_result/<int:age>, views.test_result, name"rl") views: def test_url(request):return render(request, test_url.html)def test_result(request,age):re…

HR软件新方法,企业降本增效7大策略

ZohoPeople助力企业HR降本增效&#xff0c;通过自动化HR流程、自助服务门户、工时管理、绩效管理、轮班安排、远程工作支持及决策分析&#xff0c;提升管理效率&#xff0c;优化员工体验&#xff0c;推动企业发展。 1、自动化HR流程 对于用于大量员工的企业来说&#xff0c;HR…

【时时三省】(C语言基础)函数介绍strcat

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 strcat 字符串追加 示例&#xff1a; 比如我要把world加到hello后面去 就可以用这个 还有一种方法是这样 这两个代码的意思是一样的 只是写法不一样 写的时候要注意这些 •源字符串必须…

通俗易懂的入门 Axure RP文章 ,速学

目录 1. Axure RP简介&#xff1f; 2. Axure RP基本操作 &#xff08;1&#xff09;入门理解 &#xff08;2&#xff09;插入形状 &#xff08;3&#xff09;位置对齐、 &#xff08;4&#xff09;资源库 3. Axure RP基本交互 &#xff08;1&#xff09;切换不同的页面 …

Linux命令进阶

grep 从文件中搜索字符串 grep "字符串" 文件 参数&#xff1a; -n 显示行号 -R 递归及子目录例如 grep "hello" log.c grep "main" * -nRfind 在指定路径下搜索文件 find 路径 -name 文件名find /home/linux -name hello.c //在/home/linux…

Win10 安装 Redis 数据库

一、Redis 数据库介绍 Redis 是一个开源的高性能键值对&#xff08;key-value&#xff09;的非关系型数据库。它通常用作数据结构服务器&#xff0c;支持多种类型的数据结构&#xff0c;如字符串&#xff08;strings&#xff09;、哈希&#xff08;hashes&#xff09;、列表&a…

【大事件】国产软件出头,Web版数据库管理工具

SQLynx在今年口碑大火&#xff0c;成为数据库管理工具市场的一匹黑马。那么&#xff0c;SQLynx究竟如何&#xff1f;它究竟有哪些引人注目的优点呢&#xff1f; 首先&#xff0c;SQLynx完全免费&#xff0c;这无疑为众多用户带来了福音。在这个追求性价比的时代&#xff0c;谁…

【MySQL基础刷题】总结题型(二)

最多10题&#xff0c;再多不消化了 1.至少有5名直接下属的经理2.销售员3.订单最多的客户4.计算布尔表达式的值5.查询球队积分6.苹果和桔子7.两人之间的通话次数8.确认率9.各赛事的用户注册率 1.至少有5名直接下属的经理 注意左连接的使用 select e1.name from Employee e1 lef…

低代码框架参考

企业管理信息系统作为一类重要的应用软件系统&#xff0c;具有自己的特点&#xff0c;主要有两个方面&#xff1a; 1. 系统规模大&#xff0c;目前市场上常见的ERP系统一般都有几千个页面。 2. 页面逻辑相似性强。经过比较可以发现&#xff0c;大部分页面具有类似的功能&…

见证 RTE 的新篇章丨 RTE 年度场景 Showcase 暨第四届 RTE 创新大赛开幕

人工智能技术的快速发展&#xff0c;推动 RTE 行业持续进化&#xff0c;让实时互动场景变得更丰富、更有趣、更高效。2024 年 10 月 25 日 -26 日&#xff0c;由声网和 RTE 开发者社区联合主办的  RTE2024 第十届实时互联网大会 将在北京悠唐皇冠假日酒店正式开启&#xff0c…

精选优质不收费数据恢复软件全解析

数据已经成为了我们生活和工作中无比珍贵的资产。然而我们在使用中总会因为各种意外导致数据丢失。今天&#xff0c;我们就来深入了解一些优秀的不收费的数据恢复软件&#xff0c;看看他们如果帮我们力挽狂澜。 1.福晰数据恢复 链接直达&#xff1a;https://www.pdf365.cn/fo…

Java常见集合一条龙讲解版(结合底层原理以及面试题)

Java集合大体上可以分为俩类&#xff0c;一类是单列集合&#xff08;Collection&#xff09;&#xff0c;另一类是双列集合&#xff08;Map&#xff09;。 其中单列集合还包括俩种集合&#xff0c;一类是List&#xff0c;另一类是Set。 在Java中对于这些位级比较高的都会封装…

No.16 笔记 | SSRF(服务器端请求伪造)基础

一、SSRF基础知识 1.1 什么是SSRF&#xff1f; &#x1f50d; SSRF是"Server-Side Request Forgery"的缩写&#xff0c;中文意思是"服务器端请求伪造"。 &#x1f3ad; 简单来说&#xff1a;攻击者让服务器去访问它不应该访问的地方。 1.2 SSRF的基本模…

【Spring】Spring实现加法计算器和用户登录

加法计算器 准备工作 创建 SpringBoot 项目&#xff1a;引入 Spring Web 依赖&#xff0c;把前端的页面放入项目中 **<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport"…

2024国际潜水小姐大赛中国区总决赛盛典在广州举行,吉林选手张潇文获冠军!

传承“以美之名&#xff0c;保护海洋”的精神&#xff0c;2024年10月15日晚&#xff0c;2024国际潜水小姐大赛中国区总决赛盛典在广州渔民新村隆重举行&#xff01;来自全国多个城市&#xff0c;经过层层选拔产生的20位佳丽齐聚广州&#xff0c;以独特的女性水下之美和健康美&a…

ubuntu18.04系统中图形化界面

一、Ubuntu 18.04 中&#xff0c;使用 GDM 作为默认的图形用户界面&#xff08;GUI&#xff09;管理器。GDM 是 GNOME Display Manager 的缩写&#xff0c;它是用于 Ubuntu 的显示管理器&#xff0c;负责处理登录和会话管理。 通过命令行重启 Ubuntu 18.04 上的图形界面服务&am…

Windows系统快捷键(自用)

Microsoft Windows 的键盘快捷方式 未标记&#xff1a;表示已掌握&#xff0c;少数&#xff08;不常用&#xff09;作为笔记 红色标记&#xff1a;表示尚需掌握 黄色标记&#xff1a;表示第一序列 系统快捷键 Esc&#xff1a;停止或离开当前任务 F2&#xff1a;重命名选中的文…

若依框架篇-若依框架搭建具体过程、后端源代码分析、功能详解(权限控制、数据字典、定时任务、代码生成、表单构建、接口测试)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 若依框架概述 1.1 若依构建 1.2 后端项目搭建 1.3 前端项目搭建 2.0 利用若依框架生成前后端代码案例 3.0 功能详解 3.1 功能详解 - 权限控制 3.1.1 使用权限控制…

ORM框架简介

什么是ORM&#xff1f; ORM&#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;是一种编程技术&#xff0c;用于在关系数据库和对象程序语言之间转换数据。ORM框架允许开发者以面向对象的方式来操作数据库&#xff0c;而不需要编写复杂的SQL语句。简单…

计算机网络 tcp和udp

目录 一、TCP 建立连接-TCP 三次握手 1&#xff09; 什么是半连接队列和全连接队列&#xff1f; 2&#xff09; 为什么要三次握手? 3&#xff09; 三次握手过程中可以携带数据吗&#xff1f; 断开连接-TCP 四次挥手 1&#xff09; 为什么要四次挥手&#xff1f; 2&…