项目性能优化实战:解决首页白屏问题,自定义 loading 动画优化首屏效果

本文主要是介绍项目性能优化实战:解决首页白屏问题,自定义 loading 动画优化首屏效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求

初次打开项目的某个页面时,因为网络等原因,可能会导致包体积过大。

解决方案

准备工作(使用 gka 把 gif 转化成 svg)

需要借助 gka 这个工具。这个工具是一键快速图片优化、生成动画文件的。只需要全局安装,配合一些命令,即可将图片转成 canvas/css/svg 动画。
首先,让 UI 把 .gif 动图转换成一系列的图片,每张图片都表示此动画的单帧。然后通过命令gka <文件夹路径> -m true -t svg --minirate 0-20 -s,将动画的单帧合并成一张雪碧图,按一定的压缩比率进行压缩,最后生成 svg 格式的动画文件。
由于文章内容需要脱敏,下面放一个 gka 文档里的图。左边的表示 loading gif 的所有单帧,用 gka 工具后,能压缩成一张雪碧图合配套的 .css 文件,.html 文件为演示这个动画要如何使用。

生成的文件:
生成的文件

单帧 → svg / canvas 动效:
在这里插入图片描述

在项目中使用 svg 动画

首先,需要将 gka 生成的雪碧图和 css 文件,都放在项目的public文件夹下。这次我将雪碧图放在了public\img\loading-sprites.png,css 文件放在了public\static\css\loading.css下。并对 css 文件里的命名做了优化。

.loading-animation {width: 640px;height: 307px;background-image: url("/img/loading-sprites.png");background-repeat: no-repeat;animation-name: keyframes-loading;animation-duration: 2.88s;animation-delay: 0s;animation-iteration-count: infinite;animation-fill-mode: forwards;animation-timing-function: steps(1);
}@keyframes keyframes-loading {0% {width: 640px;height: 307px;background-image: url("/img/loading-sprites.png");}1.39% {background-position: -640px 0px;}2.78% {background-position: -1280px 0px;}4.17% {background-position: -1920px 0px;}5.56% {background-position: -2560px 0px;}/* 此处省略了一些代码 */97.22% {background-position: -44800px 0px;}98.61%,100% {background-position: -45440px 0px;}
}

然后,在入口页 index.html 引入上面提到的 css 文件。
之后,参考 gka 生成的 .html 文件,在页面 body 下添加 svg 元素。让页面一打开,就展示出 loading 的效果,取代原来的白屏。可以通过 svg 标签的 style 属性,指定 width 的值,改变 svg 的大小。

<!DOCTYPE html>
<html lang="zh"><head><!-- 此处省略了其他代码 --><link rel="stylesheet" href="/static/css/loading.css"></head><body><div id="first-loading-wrap" style="display: flex; justify-content: center; align-items: center; height:96vh; z-index: 999;"><svg id="first-loading-svg" viewBox="0, 0, 640, 307" style="width: 320px"><foreignObject id="first-loading-foreignobject" width="640" height="307"><div id="first-loading-content" class="loading-animation"></div></foreignObject></svg></div><div id="app"></div><!-- built files will be auto injected --></body></html>

最后,在路由的afterEach钩子函数里,移除 loading 效果相关的元素即可。

router.afterEach(to => {// 判断是否需要去除 loading 效果document.getElementById('first-loading-wrap')?.remove()document.getElementById('first-loading-svg')?.remove()document.getElementById('first-loading-foreignobject')?.remove()document.getElementById('first-loading-content')?.remove()// 省略其他逻辑
})

这篇关于项目性能优化实战:解决首页白屏问题,自定义 loading 动画优化首屏效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/318205

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu