前端骨架屏应用

article/2025/9/15 4:55:28

什么是骨架屏

骨架屏可以理解为在页面数据尚未返回或页面未完成完全渲染前,先给用户呈现一个由灰白块组成的当前页面大致结构,让用户产生页面正在逐渐渲染的感受,从而使加载过程从视觉上变得流畅。

生成后的骨架屏页面如下图所示:
请添加图片描述
骨架屏的主要优势为:

  1. 用户避免看到长时间的白页
  2. 可以获知页面的大体结构,减小用户认为页面出错而离开的机率
  3. 与菊花图相比视觉更加流畅

常见前端骨架屏方案

1.UI 骨架屏图

即通过 UI 提供符合页面首页样式的图来充当骨架屏,将骨架屏 base64 图片插入 root 根节点,在 webpack 打包时嵌入项目中。
这是一种简单粗暴的方法,实现起来比较容易。但缺点也很明显,就是需要 UI 设计师支持和开发介入,不能自动生成。

2. 预渲染手书写骨架屏

即通过手写 HTML、CSS 的方式为目标页定制骨架屏。这种方式可以做到对页面真实样式的复刻。不过一旦由于各种原因导致页面样式发生改变,就需要再改一遍骨架屏的样式和布局,极大增加了维护的成本。
如下:

  1. vant框架的van-skeleton组件
// 源码核心实现
function Skeleton(h, props, slots, ctx) {if (!props.loading) {return slots.default && slots.default();}// ....
}
  1. vue-skeleton-webpack-plugin+自定义skeleton组件
    这是经过预渲染手动书写的代码生成相应的骨架屏,该方案经过 vueSSR 结合 webpack 在构建时渲染写好的 vue 骨架屏组件,将预渲染生成的 DOM 节点和相关样式插入到最终输出的 html 中。
// vue.config.js
const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin')
const isProduction = process.env.NODE_ENV === 'production'module.exports = {css: {extract: true // 分离css样式,让骨架屏的css在开发模式下生效},chainWebpack: config => {// 打包时候增加骨架屏if (isProduction) {config.plugin('skeleton').use(SkeletonWebpackPlugin, [{webpackConfig: {entry: {app: resolve('/src/views/skeleton/skeleton.js')}},minimize: true,quiet: true}])}}
}

3. 自动生成静态骨架屏

page-skeleton-webpack-plguin 通过 Puppeteer 操控 handless Chrome 打开需要生成的骨架屏页面,在等待页面加载完成之后,保留页面布局样式的前提下,通过对页面中元素进行增删,对已有元素通过层叠样式进行覆盖,使其展示为灰白块。
它生成骨架屏的方案可以根据项目中不同的路由页面生成相应的骨架屏页面,并将骨架屏页面通过 webpack 打包到对应的静态路由页面中。
它的不足之处在于:
● 实际使用过程中无法监听接口返回导致生成骨架屏的时机是否准确
● 生成的页面与业务人员写的结构质量有直接关系,经常出现需要手工二次调整的情况

4. 自动生成骨架屏(dps)

原理简单来讲就是:遍历(这个遍历其实只需要遍历一层即可)可见区域可见的 DOM节点并获取它们的宽高和位置,然后用这些数据生成骨架屏,最后利用Puppeteer——谷歌的headLesschrome工具来完成完全的自动化生成骨架屏,目前唯一的缺点就是还不支持给单页面的不同路由都设置骨架屏,只能设置其中一个(spa暂时还没有方案)
在这里插入图片描述

使用 CLI 工具生成骨架屏,最多只需以下四步:

  1. 全局安装,npm i draw-page-structure –g
  2. dps init 生成配置文件 dps.config.js
  3. 修改 dps.config.js 进行相关配置
  4. dps start 开始生成骨架屏
    只需简单几步,然而并无繁琐的配置:
    在这里插入图片描述

要按本身的项目状况来配置 dps.config.js,常见的配置项有:
● url: 待生成骨架屏的页面地址
● output.filepath: 生成的骨架屏节点写入的文件
● output.injectSelector: 骨架屏节点插入的位置,默认 #app
● background: 骨架屏主题色
● animation: css3动画属性
● rootNode: 针对某个模块生成骨架屏
● device: 设备类型,默认 mobile
● extraHTTPHeaders: 添加请求头
● init: 开始生成以前的操做
● includeElement(node, draw): 定制某个节点如何生成
● writePageStructure(html, filepath): 回调的骨架屏节点

draw-page-structure
dps


http://chatgpt.dhexx.cn/article/bPDwp8Bp.shtml

相关文章

如何实现骨架屏效果?

今天我们来用原生js实现一个骨架屏的效果,效果如下: 首先思考如何实现 思考实现方式 骨架屏的原理是在数据没加载出来的时候,使用滚动的背景颜色去替代,等到加载完毕后则显示对应内容 那么我们的核心就是实现一个.skeleton的样…

啥是骨架屏

(一)什么是骨架屏 骨架屏可以理解为是当数据还未加载进来前,页面的一个空白版本。在页面完全渲染完成之前,用户会看到一个样式简单,描绘了当前页面的大致框架的页面,然后骨架屏中各个占位部分被实际资源完…

前端骨架屏方案与实践

对于依赖接口渲染的页面,在拿到数据之前页面往往是空白的,为了提示用户当前正在加载中,往往会使用进度条、loading图标或骨架屏的方式。 对于前两种方案而言,实现比较简单;本文主要研究骨架屏的实现方案。 骨架屏(Ske…

网页骨架屏自动生成方案(dps)

来源:花满楼 https://zhuanlan.zhihu.com/p/74403911 什么是骨架屏? 什么是骨架屏呢?骨架屏(Skeleton Screen)是指在页面数据加载完成前,先给用户展示出页面的大致结构(灰色占位图),在拿到接口数…

骨架屏

(一)什么是骨架屏 骨架屏可以理解为是当数据还未加载进来前,页面的一个空白版本。在页面完全渲染完成之前,用户会看到一个样式简单,描绘了当前页面的大致框架的页面,然后骨架屏中各个占位部分被实际资源完…

Vue中实现骨架屏的多种方式

vue-cli项目首页加载缓慢想要使用骨架屏效果,经过几天的实践,这里学习并记录一下vue项目自动生成骨架屏方法。 前言:骨架屏的作用主要是在网络请求较慢时,提供基础占位,当数据加载完成,恢复数据展示。这样给…

骨架屏原理——面试别再被挨打了

目录 前言 骨架屏是什么 骨架屏原理 用途: (一)简单实现 (二) vue项目中的构建 (三)自动化方案 前言 同样是之前练手项目中的,emmm,知道干嘛用的,没了解过具体原理…

性能测试总结之内存泄露和内存溢出

刚刚做完了一个项目的性能测试,“有幸”也遇到了内存泄露的案例,所以在此和大家分享一下。 主要从以下几部分来说明,关于内存和内存泄露、溢出的概念,区分内存泄露和内存溢出;内存的区域划分,了解GC回收机…

内存泄露与内存溢出的区别及解决方法

内存溢出与泄露的区别 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。 内存泄露 memory leak&…

jvm故障 内存泄露和内存溢出总结

目录 内存泄漏memory leak 内存泄漏的分类(按发生方式来分类) 内存泄露的场景 静态集合类 / 长生命周期的对象持有短生命周期对象的引用 / 单例模式 /类加载器 各种连接,如数据库连接、网络连接和IO连接等 变量不合理的作用域 内部类持…

JVM——内存泄漏与内存溢出

内存泄漏与内存溢出 1. 面试题 什么是内存泄漏和什么是内存溢出 (陌陌) Java存在内存泄漏吗,内存泄漏的场景有哪些,如何避免(百度) Java 中会存在内存泄漏吗,简述一下?(猎聘) 内存泄漏是怎么造成的?(拼多多、字节跳动)…

Java中内存溢出和内存泄露详解

1、内存溢出(OOM) 在程序中导致程序崩溃的两种原因有: ①、空指针、下标越界等异常,这类问题主要原因是因为代码写的有问题 ②、还有一类问题是,代码看着也没有问题,在进行GC时,回收也没有空出足…

内存泄漏和内存溢出的区别

内存泄漏就是在jvm堆中生成的对象,经过垃圾回收器回收后也无法得到有效的释放,则会导致可用的虚拟机可分配的内存越来越少。最终可能导致内存溢出。 以发生的方式来分类,内存泄漏可以分为4类: 1、常发性内存泄漏。发生内存泄漏的…

什么是内存泄漏和内存溢出

目录 一、内存溢出 (OutOfMemory)二、内存泄漏 (Memory Leak) 一、内存溢出 (OutOfMemory) 它是指程序在申请内存时,没有足够的内存空间供其使用,抛出OutOfMemory异常。 比如申请了一个8MB空间,但是当前内存可用空间只有5MB,那么…

内存溢出和内存泄漏

内存溢出: 一、内存溢出相对于内存泄漏来说,尽管更容易被理解,但是同样的,内存溢出也是引发程序崩溃的罪魁祸首之一。 二、由于GC一直在发展,所有一般情况下,除非应用程序占用的内存增长速度非常快&#…

Vim替换命令substitute介绍

原文地址:再谈Vim substitute替换命令-Vim入门教程(54) 在Vim替换命令一文介绍过,substitute 命令的语法格式为::[range]s[ubstitute]/{pattern}/{string}/[flags]。 [flags] 表示可选的标志位,常用的包括 g、c、n、e 等。其中&…

VIM替换命令%s

[rootlocalhost 09:03:42 /home/test]# cat vim_test.txt linux nginx aabb bbcc ccdd vim vim_test.txt 进入编辑模式 输入指令 :%s/bb/zz/gc 全局替换,带确认 按y对搜索项替换第一个 按y对搜索项替换第二个 这种操作方法 ,查看替换过程与效果。避…

八皇后问题c语言算法

目录 [TOC] 问题分析: 相信八皇后规则的问题,大家都很熟悉,接下来是如何分析回溯法的应用。回溯法与图里面的深度优先遍历非常的类似,就是,在满足题目条件时候,它总是优先选择第一个,当不满足…

八皇后算法

两个皇后都不能处于同一行、同一列或同一斜线上 讨论如果是八个皇后,即存在于8*8的行列式中,每行每列一定存在一个皇后,现在我们用queen[row]col 表示在第row行的皇后处于第col列, 位置的选定,5人 然后判断此时皇后所…

【算法】八皇后问题

1. 问题描述 在 8 * 8 的国际象棋棋盘上摆放八个皇后,任意两个皇后不能处于同一行、同一列或同一斜 线上,请求出所有的摆法。 2. 算法描述 用回溯算法来考虑此问题,在放置皇后之前判断该位置是否会产生冲突。有冲突就继续判断 下一个位置&…