(亲测)vue-cli项目添加骨架屏多种方式,自动生成骨架屏

vue-cli项目首页加载缓慢想要使用骨架屏效果,经过几天的踩坑,这里学习并记录一下vue项目自动生成骨架屏方法。

 

添加骨架屏,其优势在于:

  • 写于HTML文件中,独立于Vue框架,节省了JS加载时间+JS全局环境创建的执行时间的时间
  • 只在主页面根据页面结构独立编写,预先展示页面结构,进行视觉暂留,提供更好的交互感官
  • 只在页面结构变化时进行修改,维护成本相对较低

骨架屏的作用主要是在网络请求较慢时,提供基础占位,当数据加载完成,恢复数据展示。这样给用户一种很自然的过渡,不会造成页面长时间白屏或者闪烁等情况。 常见的骨架屏实现方案有ssr服务端渲染和prerender两种解决方案。

 

 

那么重点就是怎么添加骨架屏 了,

 

大概方案有:

  1. 手动编写骨架屏代码
  2. 通过预渲染手动书写的代码生成相应的骨架屏
    比如:vue-skeleton-webpack-plugin
  3. 饿了么内部的生成骨架页面的工具
    page-skeleton-webpack-plugin
  4. JavaScript操作DOM 的方式结合 Puppeteer 自动生成网页骨架屏
  5. 其他...

 

上述方案分析:

1、手动编写骨架屏代码

该方法就是手动编写项目index.html 入口文件,实现在vue项目初始化展示替换div#app根元素前的骨架屏效果。

 

2、通过预渲染手动书写的代码生成相应的骨架屏 vue-skeleton-webpack-plugin

该方法需要下载使用vue-skeleton-webpack-plugin,主要原理是利用vue-server-renderer 将 .vue格式的骨架屏文件处理成htmlcss字符串的功能,进而完成骨架屏的注入;但是需要手动编写预渲染的骨架屏效果图代码;

 

亲测,注意以下出错场景:

  • 【webpack --config ./webpack.skeleton.conf.js】报错可以尝试将webpack版本从4.0降到3.0;
  • vue-loader@15.*之后 必须配置带有VueLoaderPlugin 之外,还需另外单独配置css-loader。(如果你不想手动设置 webpack,我们推荐使用 Vue CLI 直接创建一个项目的脚手架。通过 Vue CLI 创建的项目会针对多数常见的开发需求进行预先配置,做到开箱即用。)
  • 错误未安装webpck-cli,使用命令全局安装【npm install -g webpack-cli】即可;
  • 项目报错可能是需要安装 css-loader style-loader
  • 如果提示在webpack.config中未配置mode环境选项,配置即可
  • 为保持构建环境一致,请采用`npm run dev`脚本编译的形式,以确保使用的webpack命令,vue-loader是本地版本。

 

详细使用参考网址:https://segmentfault.com/a/1190000014832185 

 

使用步骤归纳:

1、安装vue-skeleton-webpack-plugin插件

2、在/src目录下新建一个Skeleton.vue文件,即已编写好的预渲染页面;

3、文件同级目录再新建一个skeleton.entry.js入口文件,其中引用了Skeleton.vue文件;

4、在项目根目录新建一个webpack.skeleton.conf.js配置文件,以专门用来进行骨架屏的构建。该文件中包含skeleton.entry.js入口文件,引用VueSSRServerPlugin插件,指定了其输出的json文件名;

5、使用【webpack --config ./webpack.skeleton.conf.js】命令在/dist目录下生成一个skeleton.json文件;

6、再在根目录下新建一个skeleton.js,该文件用于读取skeleton.jsonindex.html内插入骨架屏内容。

7、入口index.html文件,需要在被写入内容的位置添加<!--vue-ssr-outlet-->占位符,本例子在div#app里写入;

8、运行node skeleton.js,就可以完成骨架屏的注入了

 

前两个方法的局限性是都需要开发者自己编写骨架屏代码,并没有自动根据vue页面内容转换成相应色块组成的dom片段再注入入口html文件!!!所以使用该种方法开发效率低,麻烦,不能完全解决根据vue项目页面自动生成骨架屏dom,并注入入口html替代#app节点的问题

 

 

 

 

3、饿了么内部的生成骨架页面的工具  page-skeleton-webpack-plugin

 

饿了么的做的比较强大了,还有 UI 界面专门调整骨架屏

  • 对于复杂的页面也会有不尽如人意的地方
  • 生成的骨架屏节点是基于页面本身的结构和 CSS,存在嵌套比较深的情况,体积不会太小
  • 只支持 history 模式.

这个不多说,没有亲测;饿了吗骨架屏方案思路  https://github.com/Jocs/jocs.github.io/issues/22

 

 

 

 

4、JavaScript操作DOM 的方式结合 Puppeteer 自动生成网页骨架屏

该方法需要下载【npm i draw-page-structure -g】  ,用纯 DOM 的方式结合 Puppeteer 自动生成网页骨架屏,原理是:

  •       生成操作Dom的JavaScript脚本(该脚本用于将项目页面转换成色块形式的骨架屏效果);
  •      通过Puppeteer控制谷歌浏览器运行项目页面并获取页面、将上一步的脚本注入该页面,并生成骨架屏所需的Dom节点;
  •      将自动生成的骨架屏Dom片段插入到应用页面的根入口节点。

 

使用注意事项:

  • 核心在于 DOM 操作,puppeteer 仅提供运行环境和导出方式
  • 只要能访问的页面都能生成,history 与 hash 模式无限制
  • 不受项目和框架的限制,vue 和 react 等项目零修改即可复用
  • 生成色块的单位为百分比,不同设备自适应
  • 不需要 css-tree 来提取样式,不依赖页面本身的布局结构,生成扁平的 DOM 节点体积特别小
  • 支持自定义生成方式与导出方式
     

详细使用参考网址 https://www.imooc.com/article/253387、https://github.com/famanoder/dps

 

dps插件使用步骤:

1、使用命令【npm i draw-page-structure -g】安装插件

2、dps init 生成配置文件 dps.config.js

3、修改 dps.config.js 进行相关配置,包括想渲染的页面url、通过includeElement和init方法调整骨架屏效果等;

4、dps start 开始生成骨架屏

 

 

参考文章有:
Vue页面骨架屏注入实践 :

饿了吗一种自动化生成骨架屏的方案

用纯 DOM 的方式结合 Puppeteer 自动生成网页骨架屏、

dps(draw-page-structure)插件使用

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/553962.shtml

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

相关文章

win7系统屏幕键盘打开教程

我们在电脑没有接入键盘或者键盘失灵等情况下&#xff0c;如果想要输入内容&#xff0c;可以使用系统自带的屏幕键盘。只需要在控制面板中打开屏幕键盘就可以使用了&#xff0c;下面就让我们一起看看win7系统屏幕键盘打开教程吧。 1、首先点击左下角的“开始”&#xff0c;在右…

Vue-cli 项目优化归纳(打包、源码、用户体验)

前言&#xff1a;vue-cli项目开发打包部署后&#xff0c;存在问题有首次首页加载过慢&#xff0c;包括加载缓慢问题&#xff0c;需要进行vue项目优化。下面是对vue性能优化方法进行归纳&#xff0c;后面会对方法进行亲测。 主要包括&#xff1a;代码包打包优化、编码优化、用户…

win7系统图标太大的缩小教程

win7系统图标太大怎么办?图标大小直接影响了系统的第一观感&#xff0c;一个大小合适的图标能够让用户在使用时拥有更舒服的操作体验&#xff0c;也能在一定程度上避免视力和精神的消耗。一般来说图标不宜太大&#xff0c;如果太大了我们可以将它缩小&#xff0c;下面就一起看…

JS中的prototype、__proto__与constructor,原型和原型链

理解原型的几个关键点&#xff1a; 1、所有的引用类型&#xff08;数组、函数、对象&#xff09;可以自由扩展属性&#xff08;除null以外&#xff09;; 2、所有的引用类型&#xff08;对象&#xff09;都有一个’_ _ proto_ _属性(也叫隐式原型&#xff0c;它是一个普通的对…

win7系统图标异常修复方法

我们在使用win7的时候有可能会碰到图标异常的情况&#xff0c;一般来说都是因为误操作了某些程序或者被某些软件暗改了&#xff0c;这时候我们需要手动去重新设置一下图标&#xff0c;方法也很简单&#xff0c;下面就一起看看win7系统图标异常修复方法吧。 win7系统图标异常修…

彻底理解cookie,session,token

转载自&#xff1a;https://www.cnblogs.com/moyand/p/9047978.html 发展史 1、很久很久以前&#xff0c;Web 基本上就是文档的浏览而已&#xff0c; 既然是浏览&#xff0c;作为服务器&#xff0c; 不需要记录谁在某一段时间里都浏览了什么文档&#xff0c;每次请求都是一个新…

硬盘基本知识(磁头、磁道、扇区、柱面),格式化容量计算

计算差&#xff1a; 在购买硬盘之后&#xff0c;细心的人会发现&#xff0c;在操作系统当中硬盘的容量与官方标称的容量不符&#xff0c;都要少于标称容量&#xff0c;容量越大则这个差异越大。标称40GB的硬盘&#xff0c;在操作系统中显示只有38GB&#xff1b;80GB的硬盘只有7…

在浏览器中输入网址总是打开同一个网站怎么回

我们经常使用浏览器来访问不同的网站&#xff0c;但是有用户发现自己无论在浏览器中输入怎样的网址&#xff0c;打开的同一个网站&#xff0c;这是怎么回事?小编认为应该是用户浏览器被劫持引起的。那么小编下面就给大家讲讲解决的办法。 操作步骤&#xff1a; 1、按WinR键打…

常用校验码(奇偶校验码、海明校验码、CRC校验码)

转载自&#xff1a;https://www.cnblogs.com/VersionP1/p/7779251.html &#xff0c;作者&#xff1a; FunnyOne 常用校验码&#xff08;奇偶校验码、海明校验码、CRC校验码&#xff09; 一、奇偶校验码二、海明校验码三、CRC校验码 计算机系统运行时,各个部之间要进行数据交…

原码、反码、补码、移码

版权声明&#xff1a;本文为CSDN博主「刘水镜」的原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接及本声明。 原文链接&#xff1a;https://blog.csdn.net/liushuijinger/article/details/7429197 原码&#xff1a; 如果机器字长为n&#…

【计算机系统】指令流水线

前言 流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各部件同时处理是针对不同指令而言的&#xff0c;比如说&#xff0c;指令流水线把一条指令分为取指、分析和执行3部分&#xff0c;可以同时处理取指和分析&#xff0c;但是不能同时处理一个部…

win7系统蓝屏代码0x0000003b怎么修复

蓝屏问题是操作系统无法从错误中恢复时&#xff0c;为保护电脑数据文件而强制显示的屏幕图像。并且给用户提供错误代码方便排查&#xff0c;那win7系统蓝屏代码0x0000003b怎么修复呢?就此问题&#xff0c;下面小编介绍win7系统蓝屏代码0x0000003b的修复方法。 win7系统蓝屏代…

计算机系统存储器分类和总线分类

计算机系统存储器分类 1、按存储介质 半导体存储器&#xff1a;用半导体器件组成的存储器。磁表面存储器&#xff1a;用磁性材料做成的存储器。光存储器 2、按存储方式 随机存储器&#xff1a;任何存储单元的内容都能被随机存取&#xff0c;且存取时间和存储单元的物理位置无…

win7看视频卡顿或声音画面不同步的解决步骤

win7看视频卡顿或声音画面不同步怎么办?相信大家在使用电脑观看视频的时候&#xff0c;都有遇到视频卡顿或声画不同步的情况吧&#xff0c;非常影响观看体验。发生这个问题的原因可能是视频本身有问题或者声卡出现问题了。接下来就让小编给大家讲讲win7看视频卡顿或声音画面不…

win7系统怎么打开屏幕键盘

win7系统怎么打开屏幕键盘?我们在电脑没有接入键盘或者键盘失灵等情况下&#xff0c;如果想要输入内容&#xff0c;可以使用系统自带的屏幕键盘。只需要在控制面板中打开屏幕键盘就可以使用了&#xff0c;下面就让我们一起看看win7系统屏幕键盘打开教程吧。 win7系统怎么打开…

Gantt(甘特图)与PERT(项目计划评审技术)图,项目关键路径和松弛时间

甘特图也叫做进度管理图。 他是一种简单的水平条形图&#xff0c;它以日历为基准描述项目任务&#xff0c;水平轴表示日历时间线&#xff0c;每一个线条表示一个任务&#xff0c;任务名称垂直的列在左边列中&#xff0c;图中的线条的起点和终点对应水平轴上的时间&#xff0c;…

win7系统更改密码策略的设置方法

win7的密码策略关系着我们的密码格式、密码需要的字符等&#xff0c;如果我们设置的密码策略太过复杂&#xff0c;可能会让我们在使用密码时非常麻烦&#xff0c;但是也会让我们的密码更难被入侵&#xff0c;那么win7系统如何更改密码策略呢?就此问题&#xff0c;下面一起来看…

软件风险基础知识

在软件开发和实际应用过程中&#xff0c;都会存在一定的风险&#xff0c;而对于该种风险的规避则已经成为软件测试工作开展过程中的核心所在。 软件风险管理的概念&#xff1a; 在软件开发过程中所遭遇到的预算和进度问题以及部分对软件项目会产生影响的因素&#xff0c;都被称…

U盘出现拒绝访问怎么解决

使用U盘启动盘安装系统时需要用到U盘&#xff0c;但是当我们将U盘插上电脑&#xff0c;结果出现拒绝访问的情形&#xff0c;别说是使用U盘启动盘重装系统了&#xff0c;连U盘基础的文件存储功能都无法使用。当U盘出现拒绝访问怎么解决呢?就此问题&#xff0c;下面小编分享u盘拒…

学习阮一峰Javascript模块化编程,requireJS使用

使用背景NOW&#xff1a; 网站功能逐渐丰富&#xff0c;网页中的js也变得越来越复杂和臃肿&#xff0c;原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式。 项目需要一个团队分工协作、进度管理、单元测试等等......开发者不得不使用软件工程的…