Vue项目首次加载慢的优化方法

这篇具有很好参考价值的文章主要介绍了Vue项目首次加载慢的优化方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LCP

LCP主要受4个因素影响

  • 缓慢的服务器响应速度
  • JavaScript和CSS渲染阻塞
  • 资源加载时间
  • 客户端渲染

如何改进

资料

mdn web performance

使用PRPL模式做到即时加载

优化关键渲染路径

概述

它是影响页面在加载阶段的主要标准。
优化关键渲染路径是指优先显示与当前用户操作相关的内容
提供快速的web体验需要浏览器进行大量工作。作为web开发人员,大部分工作是隐藏的:我们编写HTML,,屏幕上会出现一个漂亮的页面。但是浏览器到第一如何从使用HTML,CSS和JavaScript变成屏幕上的渲染像素呢?
性能优化就是要了解在接收HTML,CSS和JavaScript字节和将它们转换为渲染像素所需的处理之间的这些中间步骤中发生了什么,这是关键的渲染路径。
vue首屏加载优化,Vue,性能优化,前端
通过优化关键渲染路径,我们可以显著缩短首次渲染页面的时间。此外,了解关键渲染路径也是构建性能良好的交互式应用程序的基础。交互式更新过程是相同的,只是在一个连续的循环中完成,理想的速度为60帧/s!但首先,概述浏览器如何显示简单页面。

ndm文档
如何优化

为尽快完成首次渲染,我们需要最大限度减小以下三种可变因素(关键渲染路径的各种指标):

(1)关键资源的数量。关键资源,所有可能阻碍页面渲染的资源。
(2)关键路径长度。获取构建页面所需的所有关键资源所需的RTT(Round Trip Time)
(3)关键字节的数量。作为完成和构建页面的一部分而传输的字节总数。

渲染阻断:
渲染阻塞是一个组件,它将不允许浏览器渲染整个DOM树,直到给定的资源被完全加载。

关键资源:

  1. DOM,一旦HTML被解析,就会建立一个DOM树。vue首屏加载优化,Vue,性能优化,前端

  2. CSSOM Tree,CSSOM也是基于对象的树,它负责处理与DOM树相关的样式。一般来说,CSS被认为是一种阻塞渲染资源。vue首屏加载优化,Vue,性能优化,前端

  3. JavaScript,什么是解析器阻塞?当需要下载和执行JavaScript代码时,浏览器会暂停执行和构建DOM树。当JavaScript代码被执行完后,DOM树的构建才继续进行。JavaScript很可能会查询CSSOM,这意味着,在执行任何JavaScript之前,CSS文件必须被完全下载和解析。

  4. 注意,DOMContentLoaded在HTML DOM被完全解析和加载时被触发。该时间不会等待image,子frame甚至是样式表被完全加载,唯一的目标是文档被加载。可以在window中添加事件,以查看DOM是否被解析和加载。

window.addEventListener('DOMContentLoaded',(event)=>{
    console.log('DOM被解析且加载成功')
})

关键资源是可能阻止网页首次渲染的资源。这些资源越少,浏览器的工作量就越小,对 CPU 以及其他资源的占用也就越少。同样,关键路径长度受所有关键资源与其字节大小之间依赖关系图的影响:某些资源只能在上一资源处理完毕之后才能开始下载,并且资源越大,下载所需的往返次数就越多。最后,浏览器需要下载的关键字节越少,处理内容并让其出现在屏幕上的速度就越快。要减少字节数,我们可以减少资源数(将它们删除或设为非关键资源),此外还要压缩和优化各项资源,确保最大限度减小传送大小。

优化关键渲染路径的常规步骤如下:
(1)对关键路径进行分析和特性描述:资源数、字节数、长度。
(2)最大限度减少关键资源的数量:删除它们,延迟它们的下载,将它们标记为异步等。
(3)优化关键字节数以缩短下载时间(往返次数)。
(4)优化其余关键资源的加载顺序:您需要尽早下载所有关键资产,以缩短关键路径长度

关键渲染路径优化
如何优化关键渲染路径,上一章初步了解了关键渲染路径的流程,此时,可以对此做一定的优化。我们可以从三个大类方向优化

一、减少网络发送的数据量

 1.采用精简(移除注释,空格)、混淆(额外缩短变量名)的方式

 2.gzip压缩,现在绝大部分浏览器都支持gzip压缩

 3.部分资源可考虑采用内联的

 4.静态资源采用浏览器缓存,时间要长

二、减少关键资源的数量,移除非关键渲染资源

1.css默认会生成cssom。通过非关键资源拆出来,单独外联引入,增加media,则浏览器只会下载,不会解析(用到的时候解析)。但是此时额外增加了网络请求,需要权衡

  2.js执行会等待cssom构建完毕,并且会阻塞dom的构建。动态引入js  

三、缩短关键呈现路径的长度

 1.通过外联js加async,则不会等待cssom,异步执行,不阻塞dom构建

如何优化关键渲染路径?
为尽快完成首次渲染,我们需要最大限度减小以下三种可变因素:

关键资源的数量。
关键路径长度。
关键字节的数量。
关键资源是可能阻止网页首次渲染的资源。这些资源越少,浏览器的工作量就越小,对 CPU 以及其他资源的占用也就越少。
同样,关键路径长度受所有关键资源与其字节大小之间依赖关系图的影响: 某些资源只能在上一资源处理完毕之后才能开始下载,并且资源越大,下载所需的往返次数就越多。

最后,浏览器需要下载的关键字节越少,处理内容并让其出现在屏幕上的速度就越快。要减少字节数,我们可以减少资源数(将它们删除或设为非关键资源),此外还要压缩和优化各项资源,确保最大限度减小传送大小。

**优化关键渲染路径的常规步骤如下: **

1.对关键路径进行分析和特性描述: 资源数、字节数、长度。
2.最大限度减少关键资源的数量: 删除它们,延迟它们的下载,将它们标记为异步等。
3.优化关键字节数以缩短下载时间(往返次数)。
4.优化其余关键资源的加载顺序: 您需要尽早下载所有关键资产,以缩短关键路径长度。

转载自:https://developers.google.com/web/fundamentals/performance/critical-rendering-path/optimizing-critical-rendering-path?hl=zh-cn

优化CSS

概述

CSS 如何阻塞文档解析?
理论上,既然样式表不改变 DOM 树,也就没有必要停下文档的解析等待它们。然而,存在一个问题,JavaScript 脚本执行时可能在文档的解析过程中请求样式信息,如果样式还没有加载和解析,脚本将得到错误的值,显然这将会导致很多问题。所以如果浏览器尚未完成 CSSOM 的下载和构建,而我们却想在此时运行脚本,那么浏览器将延迟 JavaScript 脚本执行和文档的解析,直至其完成 CSSOM 的下载和构建。也就是说,在这种情况下,浏览器会先下载和构建 CSSOM,然后再执行 JavaScript,最后再继续文档的解析。

按需加载css

优化图像

关键路径图片预加载preload
图片延迟加载,等页面主体加载好后,再加载

优化网页字体

优化JavaScript(针对客户端渲染的网站)

JS延迟加载

js的加载,解析和执行会阻塞页面的渲染过程,因此我们希望js脚本能够尽可能的延迟加载,提高页面的渲染速度。

  1. 将js脚本放在文档的底部,来使js脚本尽可能的在最后来加载执行。

  2. 给js脚本添加defer属性,这个属性会让脚本的加载与文档的解析同步解析,然后在文档解析完成后再执行这个脚本文件,这样的话就能使页面的渲染不会阻塞。多个设置了defer属性的脚本按规范来说最后是顺序执行的,但是在一些浏览器中可能不是这样。defer属性只对外部文件有效,对本地js文件没有效果;defer属性是遇到script标签时,浏览器开始异步下载,当遇到</html>标签时,表明页面加载完成,开始执行js文件。js文件按顺序执行。

  3. 给js脚本添加async属性,这个属性会使脚本异步加载,不会阻塞页面的解析过程,但是当脚本加载完成后立即执行js脚本,如果这个时候文档没有解析完成的话同样会阻塞。多个async属性的脚本的执行顺序是不可预测的。只对外部文件有效,对本地js文件没有效果;async属性是遇到script标签开始通知浏览器异步下载,下载完成后,立即执行。js执行不按照顺序。

  4. 动态创建DOM标签的方式,我们可以对文档的加载事件进行监听,当文档加载完成后再动态的创建script标签来引入js脚本。

  5. 使用setTimeout,在每一个脚本文件最外层设置一个定时器。
    按需加载js

  6. Vue组件按需加载,用v-if代替v-show

  7. 优化服务器带宽

  8. 延迟加载体积大或渲染慢的组件

  9. 将一些基本不变的数据缓存到本地,下次加载的时候会更快一些

  10. 将js,css,图片,文件进行提取到单独的文件,和开启gzip压缩

preload和prefetch区别

  • preload 告诉浏览器立即加载资源;
    prefetch 告诉浏览器在空闲时才开始加载资源;
    preload、prefetch 仅仅是加载资源,并不会“执行”;
    preload、prefetch 均能设置、命中缓存;
    正确使用 preload、prefetch 不会导致重复请求;

HTTP缓存

何时起作用
vue首屏加载优化,Vue,性能优化,前端
HTTP缓存是作用于网站导航阶段的网络请求的开始阶段。

  1. 导航阶段,指用户发出URL请求到页面开始解析的这个过程。
  2. 网络请求阶段
    我们简单的讲述一下,在HTTP缓存之前所发生的流程。
  3. 用户输入:地址栏中输入一个查询关键字,此时分2种情况
  4. 搜索内容:地址栏会使用浏览器默认的搜索引擎,来合成新的带搜索关键字的URL
  5. 符合URL规则 地址栏会根据规则,把内容加上协议,合成为完整的URL

卸载原页面并重定向到新页面(如果有原页面)
浏览器会将现有页面卸载掉并重定向到用户所输入的url页面,也就是图中的Precess Unload Event和Redirect流程。

处理Service Worker(如果有的话)
如果当前页面注册了Service Worker:主要用途是拦截,重定向和修改页面发出的请求,充当网络请求的仲裁者的角色。也就是图中Service Worker Init与Service Worker Fecth Event步骤

HTTP Cache

最好最快的请求就是没有请求
浏览器对静态资源的缓存本质上是HTTP协议的缓存策略,其中分为强制缓存协商缓存。两种缓存策略都会将资源缓存到本地

  • 强制缓存策略根据过期时间决定使用本地缓存还是请求新资源
  • 协商缓存每次都会发出请求,经过服务器进行对比后决定采用本地缓存还是新资源

具体采用哪种缓存策略,由HTTP协议的首部信息决定。

消息头按照用途可分为4大类:

  1. 通用头:适用于请求和响应的头字段
  2. 请求头:用于表示请求消息的附加信息的头字段
  3. 响应头:用于表示响应消息的附加信息的头字段
  4. 实体头:用于消息体的附加信息的头字段

其中我们对HTTP缓存用到的字段进行一次简单的分类和汇总

头字段 所属分组
Cache-control 通用头
Expires 实体头
ETag 实体头
ETag:在更新操作中,有时候需要基于上一次请求的响应数据来发送下一次请求。在这种情况下,这个字段可以用来提供上次响应与下次请求之间的关联信息。上次响应中,服务器会通过ETag向客户端发送一个唯一标识,在下次请求中客户端可以通过if-match,if-none-match,if-range字段将这个标识告知服务器,这样服务器就知道该请求和上次的响应是相关的。

这个字段的功能和Cookie是相同的,但Cookie是网景公司自行开发的规格,而ETag是将其进行标准化后的规格

Expires和Cache-control:max-age=x(强缓存)

Expiress和Cache-control:max-age=x是强制缓存策略的关键信息,两者均是响应首部信息(后端返给客户端的)。
Expires是HTTP1.0 加入的特性,通过指定一个明确的时间点作为缓存资源的过期时间,在此时间点之前客户端将使用本地缓存的文件应答请求,而不会向服务器发出实体请求。
Expires的优点:

  • 可以在缓存过期时间内减少客户端的HTTP请求
  • 节省了客户端处理时间和提高了Web应用的执行速度
  • 减少了服务器负载以及对客户端网络资源的消耗

问题:
Expires所指定的时间点是以服务器为准的时间,但是客户端进行过期判断时是将本地的时间与此时间点对比。

针对这个问题,HTTP1.1 新增了Cache-control首部信息以便更精准地控制缓存。
常用的Cache-control信息有以下几种。

  • no-cache:
    使用ETag响应头来告知客户端(浏览器,代理服务器)这个资源首先需要被检查是否在服务器端修改过,在这之前不能被复用。这个意味着no-cache将会和服务器进行一次通讯,确保返回的资源没有修改过,如果没有修改过,才没有必要下载这个资源。反之,则需要重新下载。

  • no-store

  • public & private

  • max-age=<seconds>

  • s-maxage=<seconds>

  • no-transform
    与Expires相比,max-age可以更精确的控制缓存,并且比Expires有更高的优先级

强制缓存策略下(Cache-control未指定no-cache和no-store)的缓存判断流程
vue首屏加载优化,Vue,性能优化,前端
ETag和if-none-match(协商缓存)
Etag是服务器为资源分配的字符串形式的唯一性标识,作为响应首部信息返回给浏览器

浏览器在Cache-control指定no-cache或者max-age和expries均过期之后,将Etag值通过if-none-match作为请求头部信息发送给服务器。

服务器接收到请求之后,对比所请求资源你的ETag值是否改变,如果未改变将返回304 Not Modified,并且根据既定的缓存策略分配新的Cache-control信息;如果资源发生了改变,则会返回最新的资源以及重新分配的ETag值。
vue首屏加载优化,Vue,性能优化,前端
如果强制浏览器使用协商缓存策略,需要将Cache-control首部信息设置为no-cache,这样便不会判断max-age和Expires过期时间,从而每次资源请求都会经过服务器对比。文章来源地址https://www.toymoban.com/news/detail-526683.html

到了这里,关于Vue项目首次加载慢的优化方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【VUE】解决图片视频加载缓慢/首屏加载白屏的问题

      在 Vue3 项目中,有时候会出现图片视频加载缓慢、首屏加载白屏的问题 通常是由以下原因导致的: 图片或视频格式不当:如果图片或视频格式选择不当,比如选择了无损压缩格式,可能会导致文件大小过大,从而影响加载速度。 页面中同时加载了大量的图片和视频,导致

    2024年02月16日
    浏览(37)
  • Vue首屏优化,12个提速建议

    vue首屏代码优化的概要方案,供参考: 将首屏所需的组件和代码拆分成独立的模块,并使用懒加载技术(如 Vue 的异步组件或路由懒加载)来按需加载它们。这样可以减少初始加载的代码量,提高首屏的加载速度。 代码拆分 创建多个组件文件:将大型的 Vue 组件拆分成多个较

    2024年02月19日
    浏览(40)
  • vue h5项目 打包&&加载优化

    打包美化: 1)npx browserslist@latest --update-db 更新去除警告 2)打包进度条 npm add progress-bar-webpack-plugin -D npm add webpackbar -D npm install --save-dev webpack-bundle-analyzer 优化: 1. 各个插件和loader所花费的时间 npm i speed-measure-webpack-plugin -D 安装打包优化分析插件 得到所有打包文件耗时: 2.添

    2024年02月10日
    浏览(38)
  • 如何缩短 js 解析时间,如何优化首屏(延迟加载)

    避免全局查找(沿着作用域链找需要时间),避免闭包,用数据结构等 压缩 剔除没用到的代码,把长表达式转换成同含义的短表达式等 语法转换和优化:压缩工具会对 JavaScript 代码进行语法转换和优化,以提高代码的执行效率。例如,它可能将一些长表达式简化为更短的形

    2024年02月16日
    浏览(49)
  • Webpack项目学习:Vue-cli(脚手架)-优化配置 -ui库element-plus+减小打包体积 -按需加载+自定义主题+优化

    安装 全部引入,在入口文件main.js  启动:npm start  按需引入 需要插件快速开始 | Element Plus (gitee.io)     更改默认配置 主题 | Element Plus (gitee.io)    如果有模块没有安装 ,安装一下即可 优化 关闭性能分析 文件单独打包 做缓存-

    2024年02月08日
    浏览(72)
  • vue首屏白屏原因及解决办法

    vue首屏白屏原因大概有以下几点:    (1)由于把路由模式mode设置成history了,默认是hash          解决方法:将模式改为hash模式,或者直接把模式配置删除,而且history需要后端配合    (2)做动态路由时,next()放行与next(...to, replace)区别造成的白屏,实质是路由重复

    2024年02月08日
    浏览(50)
  • 学习Vue:【性能优化】异步组件和懒加载

    在Vue.js应用开发中,性能优化是一个至关重要的主题,而异步组件和懒加载是提升性能的有效方法之一。本文将介绍什么是异步组件和懒加载,以及如何在Vue.js中应用这些技术来提升应用性能。 异步组件 异步组件是指在需要的时候再去加载组件的一种方式。传统上,在Vue.

    2024年02月12日
    浏览(42)
  • 【 Vue3 性能优化】页面加载性能 与 更新性能

    Vue 在大多数常见场景下性能都是很优秀的,通常不需要手动优化。然而,总会有一些具有挑战性的场景需要进行针对性的微调。 数字化管理平台 Vue3+Vite+VueRouter+Pinia+Axios+ElementPlus教程 权限系统-商城 个人博客地址 Web 性能优化主要有两个方面: 页面加载性能 首次访问时,应

    2024年02月14日
    浏览(45)
  • vue 项目实现下拉加载

    场景:vue 网站手机端适配,需要实现拉到底部加载下一页的效果。 方法一:浏览器监听函数 浏览器加载到底部监听 1)data相关参数   2)核心方法 3) 页面监听 方法二 使用elementui 自带的无限滚动(这个我没试,但是理论上可以实现)

    2024年02月02日
    浏览(19)
  • uniapp 发布h5前端项目时因chunk-vendors过大导致首屏加载太慢以及跳转外部链接

    安装插件 compression-webpack-plugin 安装webpack 新建web.config.js

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包