vue基础知识七:SPA首屏加载速度慢的怎么解决?

news2024/12/25 0:41:19

在这里插入图片描述
一、什么是首屏加载

首屏时间(First Contentful Paint),指的是浏览器从响应用户输入网址地址,到首屏内容渲染完成的时间,此时整个网页不一定要全部渲染完成,但需要展示当前视窗需要的内容

首屏加载可以说是用户体验中最重要的环节

关于计算首屏时间

利用performance.timing提供的数据:

在这里插入图片描述
通过DOMContentLoad或者performance来计算出首屏时间

// 方案一:
document.addEventListener('DOMContentLoaded', (event) => {
    console.log('first contentful painting');
});
// 方案二:
performance.getEntriesByName("first-contentful-paint")[0].startTime

// performance.getEntriesByName("first-contentful-paint")[0]
// 会返回一个 PerformancePaintTiming的实例,结构如下:
{
  name: "first-contentful-paint",
  entryType: "paint",
  startTime: 507.80000002123415,
  duration: 0,
};

二、加载慢的原因

在页面渲染的过程,导致加载速度慢的因素可能如下:

  • 网络延时问题
  • 资源文件体积是否过大
  • 资源是否重复发送请求去加载了
  • 加载脚本的时候,渲染内容堵塞了

三、解决方案

常见的几种SPA首屏优化方式

  • 减小入口文件积
  • 静态资源本地缓存
  • UI框架按需加载
  • 图片资源的压缩
  • 组件重复打包
  • 开启GZip压缩
  • 使用SSR

减小入口文件体积

常用的手段是路由懒加载,把不同路由对应的组件分割成不同的代码块,待路由被请求的时候会单独打包路由,使得入口文件变小,加载速度大大增加

在这里插入图片描述
在vue-router配置路由的时候,采用动态加载路由的形式

routes:[ 
    path: 'Blogs',
    name: 'ShowBlogs',
    component: () => import('./components/ShowBlogs.vue')
]

以函数的形式加载路由,这样就可以把各自的路由文件分别打包,只有在解析给定的路由时,才会加载路由组件

静态资源本地缓存

后端返回资源问题:

  • 采用HTTP缓存,设置Cache-Control,Last-Modified,Etag等响应头
  • 采用Service Worker离线缓存

前端合理利用localStorage

UI框架按需加载

在日常使用UI框架,例如element-UI、或者antd,我们经常性直接引用整个UI库

import ElementUI from 'element-ui'
Vue.use(ElementUI)

但实际上我用到的组件只有按钮,分页,表格,输入与警告 所以我们要按需引用

import { Button, Input, Pagination, Table, TableColumn, MessageBox } from 'element-ui';
Vue.use(Button)
Vue.use(Input)
Vue.use(Pagination)

组件重复打包

假设A.js文件是一个常用的库,现在有多个路由使用了A.js文件,这就造成了重复下载

解决方案:在webpack的config文件中,修改CommonsChunkPlugin的配置

minChunks: 3

minChunks为3表示会把使用3次及以上的包抽离出来,放进公共依赖文件,避免了重复加载组件

图片资源的压缩

图片资源虽然不在编码过程中,但它却是对页面性能影响最大的因素

对于所有的图片资源,我们可以进行适当的压缩

对页面上使用到的icon,可以使用在线字体图标,或者雪碧图,将众多小图标合并到同一张图上,用以减轻http请求压力。

开启GZip压缩

拆完包之后,我们再用gzip做一下压缩 安装compression-webpack-plugin

cnmp i compression-webpack-plugin -D

在vue.congig.js中引入并修改webpack配置

const CompressionPlugin = require('compression-webpack-plugin')

configureWebpack: (config) => {
        if (process.env.NODE_ENV === 'production') {
            // 为生产环境修改配置...
            config.mode = 'production'
            return {
                plugins: [new CompressionPlugin({
                    test: /\.js$|\.html$|\.css/, //匹配文件名
                    threshold: 10240, //对超过10k的数据进行压缩
                    deleteOriginalAssets: false //是否删除原文件
                })]
            }
        }

在服务器我们也要做相应的配置 如果发送请求的浏览器支持gzip,就发送给它gzip格式的文件 我的服务器是用express框架搭建的 只要安装一下compression就能使用

const compression = require('compression')
app.use(compression())  // 在其他中间件使用之前调用

使用SSR

SSR(Server side ),也就是服务端渲染,组件或页面通过服务器生成html字符串,再发送到浏览器

从头搭建一个服务端渲染是很复杂的,vue应用建议使用Nuxt.js实现服务端渲染

小结:

减少首屏渲染时间的方法有很多,总的来讲可以分成两大部分 :资源加载优化 和 页面渲染优化

下图是更为全面的首屏优化的方案

在这里插入图片描述
大家可以根据自己项目的情况选择各种方式进行首屏渲染的优化

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

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

相关文章

指针跃动(济南)客户运营服务中心上线了!

指针跃动(济南)客户运营服务中心上线了! ——打通客户运营服务全链路—— 随着全国代驾业务需求的不断增长,“指针跃动”宣布:指针跃动(济南)客户运营服务中心上线了! 以新的思维方式…

CMT:卷积与Transformers的高效结合

论文提出了一种基于卷积和VIT的混合网络,利用Transformers捕获远程依赖关系,利用cnn提取局部信息。构建了一系列模型cmt,它在准确性和效率方面有更好的权衡。 CMT:体系结构 CMT块由一个局部感知单元(LPU)、一个轻量级多头自注意模块(LMHSA)和…

end value has mixed support, consider using flex-end instead

这是因为 应该用flex-end,不应该用end 所以将所有的都改好之后,就不会再报这个错了

python3 修改nacos的yaml配置

一、安装nacos库 pip install nacos-sdk-python 二、代码如下 import nacos import yaml# 连接地址 NACOS_SERVER_ADDRESSES "192.168.xx.xx" NACOS_SERVER_PORT 替换为你的端口号,如8848# 命名空间 NACOS_NAMESPACE "your_namespace"# 账…

【网络层】网络基础 -- IP协议

引入IP协议头格式网段划分特殊的IP地址IP地址的数量限制 私有IP地址和公网IP地址分片与组装如何分片与组装? 引入 我们前面学习了传输层的相关知识,难道真的就是直接传送吗?当然不是,那TCP究竟做了什么?IP又扮演什么角…

RFID溯源驱动汽车座椅制造的智能时代

在今天的快速发展的制造业中,信息化和智能化已经成为不可或缺的部分。信息化和智能化能够极大地提高生产效率、减少浪费,降低成本,提升产品的质量。汽车座椅产线信息化和智能化是汽车座椅产线升级的重要方向,RFID技术方案在汽车座…

有了这个技术,再也不为水浸事件发愁啦!

在现代社会中,电力是我们生活和工作的不可或缺的一部分。电力供应的可靠性对于维持社会的正常运转至关重要。而变电站则是电力系统中的关键环节,它们起着将高压电转换为适用于分配的低压电的重要作用。然而,变电站也存在各种风险,…

学习Bootstrap 5的第六天

目录 信息警告框 警告框 实例 警告框链接 实例 关闭警告框 实例 警告框动画 实例 按钮 按钮样式 实例 按钮轮廓 实例 ​编辑按钮尺寸 实例 块级按钮 实例 实例 活动/禁用按钮 实例 加载器按钮 实例 扩展小知识 信息警告框 警告框 警告框是使用 .aler…

手写Spring:第15章-通过注解注入属性信息

文章目录 一、目标:通过注解注入属性信息二、设计:通过注解注入属性信息三、实现:通过注解注入属性信息3.1 工程结构3.2 自动扫描注入占位符配置和对象类图3.3 读取属性并填充到容器中3.3.1 定义解析字符串接口3.3.2 配置Bean工厂添加解析器3…

低能量电子束曝光技术

引言 直接蚀刻和剥离是两种比较流行的图案转移工艺。在直接蚀刻工艺中,首先使用光刻技术对聚合物抗蚀剂进行构图,然后通过干法蚀刻技术用抗蚀剂作为掩模将图案转移到衬底或子层上。 剥离过程中,膜(通常是金属)被涂覆在抗蚀剂结构上&#xf…

RoboTAP:由 Google DeepMind 开发的一款机器人操作系统

Google DeepMind 开发的一款机器人操作系统RoboTAP。该系统能够通过只需几分钟的示范,就能让机器人学会新的视觉运动任务。你只需要给它展示几次如何做某件事,比如拿起一个苹果放到果冻上,它就能学会这个动作。 工作原理 该系统能够通过视觉…

CMS-织梦[dede]-通用免登发布插件

CMS-织梦[dede]-通用免登发布插件 1. 织梦通用免登陆发布插件功能说明2. 织梦通用免登陆发布接口使用说明2-1 下载插件2-2 安装插件3 对接火车头等采集工具 3 爬虫【古诗文网】示例[可选]测试火车头入库模型 使用火车头,简数采集器,八爪鱼等文章采集工具…

直播系统源码,系统分析篇:不可或缺的云转码系统

科技的进步发展让人们的生活越来越便利,而当今社会我们最常使用让我们生活变得更便利的方式,就是下载适合我们解决困难的相关直播系统源码搭建出来的APP,在一个完整的APP内,有着多种的功能强大的系统,从这篇文章开始&a…

凡邦数据提供了多种API接口服务,包括淘宝API、1688API、京东API、拼多多API、抖音API等

API接口在现代数字化时代中扮演着至关重要的角色,它们连接着不同的系统、软件和服务,促进着数据流动和业务创新。API接口供应商则是提供这些接口的服务的商家,它们为开发者提供了方便快捷的渠道,以便快速获取和使用各种API接口。 …

一站式数字营销SaaS平台Klaviyo申请纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,美国一站式数字营销SaaS平台Klaviyo近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为(KVYO)&am…

用Windows自带的工具检查磁盘

例如用的是win7。打开计算机,点击选中某个磁盘,右键点击鼠标,出现弹出菜单: 选中属性,出现下面窗口: 点击“工具”这个tab页: 点击开始检查,出现如下界面: 两个复选框都选…

开源机密计算平台:蓬莱-OpenHarmony

演讲嘉宾 | 杜 东 回顾整理 | 廖 涛 排版校对 | 李萍萍 嘉宾简介 杜东,上海交通大学助理研究员。中国计算机学会CCF会员,ACM会员。研究兴趣为操作系统与体系结构、服务器无感知(Serverless)计算、系统安全。在包括ASPLOS、ISC…

【扩散模型 李宏毅B站教学以及基础代码运用】

李宏毅教学视频: Link1 B站DDPM公式推导以及代码实现: Link2 这个视频里面有论文里面的公式推导,并且1小时10分开始讲解实例代码。 文章目录 扩散模型概念:Diffusion Model工作原理:影像生成模型本质上的共同目标B站…

qt使用QCustomplot绘制cpu和内存使用率图

一、QCustomPlot介绍 QCustomPlot是一个开源的Qt C图表库,用于可视化数据。该库提供了多种类型的可定制的图表,包括散点图、线图、柱状图和等高线图等。它还支持自定义绘制,可以创建任意形状和大小的元素,并使其与其他元素交互。Q…

iPad电容笔贵吗?开学季比较好用的ipad手写笔

“ipad好买,但是ipad的配件不好买”,我相信很多人都会有这个问题,如果你想要购买像Apple Pencil这样的官方配件,却很难舍得下手,因为一款Apple Pencil的价格就已经接近1000元了。就像许多人不愿购买昂贵的苹果官方产品…