vue中的性能优化

news2024/11/16 1:34:31

文章目录

  • 一、Vue为什么要做性能优化
  • 二、如何做vue的性能优化
    • 1. 网络请求优化
        • link标签
        • 项目静态资源压缩
        • 懒加载
        • 利用浏览器的缓存机制高效复用项目文件
        • 总结
    • 2. 代码优化
    • 3. 用户体验优化
        • 场景1
        • 场景2

一、Vue为什么要做性能优化

性能优化的目的是使网站的加载速度更快,用户等待网站加载的时间越短,他们就越可能对网站产生好感,并越可能继续在网站上浏览。此外,在移动设备上,性能优化可以帮助网站在较慢的网络条件下仍然能够流畅运行。性能优化也可以降低服务器的负载,从而降低运营成本。总之,前端性能优化是为了提高网站的速度和用户体验,并降低运营成本。

所以如果你是前端从业者,那么无论是求职的简历,还是晋升的 PPT,性能优化相关的内容都是不可或缺的。

二、如何做vue的性能优化

其实要做性能优化,需要了解很多基础知识,比如从用户输入URL到页面显示的整个过程,我们要知道在这个过程中每一步都发生了什么,之后才能针对每一步去做优化处理,这里就不多作说明。

1. 网络请求优化

link标签

可以优化的第一个点,就是在首页的标签中,通过使用标签去通知浏览器对页面中出现的其他域名做DNS的预解析。

例如页面中的图片通常都是放在独立的CDN中,这样页面加载首页的时候浏览器引擎就可以对域名进行预解析并把结果缓存起来,这样在后续的过程中若在出现相同域名的请求,浏览器就可以从缓存中直接获取对应的IP地址发起请求。

在这里插入图片描述

项目静态资源压缩

浏览器在获取网络文件时,需要通过 HTTP 请求,HTTP 协议底层的 TCP 协议每次创建链接的时候,都需要三次握手,而三次握手会造成额外的网络损耗。如果浏览器需要获取的文件较多,那就会因为三次握手次数过多,而带来过多网络损耗的问题。

解决办法首先可以考虑让文件尽可能地变少或者变小,比如先给文件打包压缩代码之后再上线;图片使用精灵兔、压缩打包图片等;

懒加载

懒加载一般有图片懒加载、路由懒加载。

图片懒加载的意思是,我们可以动态计算图片的位置,只需要正常加载首屏出现的图片,其他暂时没出现的图片只显示一个占位符,等到页面滚动到对应图片位置的时候,再去加载完整图片。

路由懒加载,把不常用的路由单独打包,在用户访问到这个路由的时候再去加载代码。

利用浏览器的缓存机制高效复用项目文件

我们需要做的,就是尽可能高效地利用浏览器的缓存机制,在文件内容没有发生变化的时候,做到一次加载多次使用,项目中如果成功复用一个几百 KB 的文件,对于性能优化来说是一个巨大的提升。

浏览器会缓存页面中的静态资源(如图片、视频、音频、CSS 文件、JavaScript 文件等),从而减少对服务器的访问压力,提高页面的加载速度。我们可以通过设置响应头中的 Cache-Control 和 Expires 字段来控制浏览器的缓存行为。

Vue.js 是一个构建用户界面的框架,它本身并不提供对 Expires、Cache-control、Last-modify、ETag 等 HTTP 头的支持。但可以使用 Vue.js 的网络请求库(如 axios)来发送 HTTP 请求,并设置这些 HTTP 头以实现缓存。

总结

  • 使用浏览器缓存:浏览器会缓存页面中的静态资源(如图片、视频、音频、CSS 文件、JavaScript 文件等),从而减少对服务器的访问压力,提高页面的加载速度。前端开发者可以通过设置响应头中的 Cache-Control 和 Expires 字段来控制浏览器的缓存行为。

  • 使用 CDN:CDN 是内容分发网络的缩写,是一种分布式的网络架构,用于将网站的静态资源分发到多个地方,从而提高网站的加载速度和可用性。前端开发者可以通过使用 CDN 来加速页面中的静态资源加载,从而提高页面的性能。

  • 使用 HTTP/2:HTTP/2 是 HTTP 协议的最新版本,它提供了多路复用、流控制和头压缩等新特性,可以提高页面的加载速度。前端开发者可以通过使用 HTTP/2 来提高页面的性能。

  • 使用缓存框架:缓存框架是一种用于缓存数据的软件,可以提高应用的性能。前端开发者可以使用缓存框架来缓存应用中的数据,从而减少对数据库的访问压力,提高应用的性能。例如,前端开发者可以使用 Redis、Memcached 等缓存框架来缓存数据,并通过设置缓存时间来控制缓存的生命周期。

    • 使用组件缓存:组件缓存是指在应用中缓存组件的状态,以便在页面切换时重用已渲染的组件,而不需要重新渲染。前端开发者可以通过框架(如 Vue)提供的组件缓存机制来实现组件缓存,从而提高应用的性能。

2. 代码优化

在Vue3里我们不需要考虑太多,他已经做的很好了,我们只需要遵循Vue的最佳使用方法,其余的交给Vue自身就可以了。

比如 computed 内置有缓存机制,比使用 watch 函数好一些;组件里也优先使用 template 去激活 Vue 内置的静态标记,也就是能够对代码执行效率进行优化;v-for 循环渲染一定要有 key,从而能够在虚拟 DOM 计算 Diff 的时候更高效复用标签等等。

然后是JS代码优化,这里指的就是实际的算法逻辑了,根据具体的问题进行分析,找到代码的瓶颈之后对耗时过长的逻辑进行优化即可。

3. 用户体验优化

性能优化的主要目的,还是为了能让用户在浏览网页的时候感觉更舒服,所有有些场景我们不能只考虑单纯的性能指标,还要结合用户的交互体验进行设计,必要的时候,我们可以损失一些性能去换取交互体验的提升

场景1

用户加载大量图片的同时,如果本身图片清晰度较高,那直接加载的话,页面会有很多图一直是白框。
我们也可以预先解析出图片的一个模糊版本,加载图片的时候,先加载这个模糊的图作为占位符,然后再去加载清晰的版本。虽然额外加载了图片文件,但是用户在体验上得到了提升。

场景2

用户上传文件的时候,如果文件过大,那么上传可能就会很耗时。而且一旦上传的过程中发生了网络中断,那上传就前功尽弃了。
我们可以选择断点续传,也就是把文件切分成小块后,挨个上传。这样即使中间上传中断,但下次再上传时,只上传缺失的那些部分就可以了。可以看到,断点上传虽然在性能上,会造成网络请求变多的问题,但也极大地提高了用户上传的体验。

还有很多组件库也会提供骨架图的组件,能够在页面还没有解析完成之前,先渲染一个页面的骨架和 loading 的状态,这样用户在页面加载的等待期就不至于一直白屏。

总的来说,我们需要根据实际场景来判断是否需要舍弃部分的性能来提示用户体验。

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

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

相关文章

【语音处理】基于自适应差分脉冲编码调制(ADPCM)的实现研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步进步,matlab项目目标合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信息:格物致知。 更多Matlab仿真内容点击👇 智能优化算…

音视频直播系统之 WebRTC 中的协议UDP、TCP、RTP、RTCP详解

一、UDP/TCP 如果让你自己开发一套实时互动直播系统,在选择网络传输协议时,你会选择使用UDP协议还是TCP协议 假如使用 TCP 会怎样呢?在极端网络情况下,TCP 为了传输的可靠性,将会进行反复重发信息的操作 在 TCP 协议…

Nagios篇之Nagios服务关联飞书实现消息告警

一、前言 通常情况下,我们在利用Nagios监控来做服务器监控时,告警是必不可少的,以便于运维人员能够及时发现异常,进而处理问题,所以关联Nagios就变得极为重要。 Nagios关联告警的形式很多,可以进行短信推送…

wpf-ListView中放置可动态调节范围的刻度尺

需求描述 某个ListView占据整个窗口,当窗口的宽度发生改变时,某一列中显示的、某一行的字符数目,能跟随窗口宽度变化而增减。 下面是我做完的效果:(只展示窗口的一部分) 此时是窗口缩放的极限&#xff0…

为什么全光谱台灯对孩子眼睛好呢?台灯全光谱到底是什么意思

相信大家在购买台灯时有经常看到“全光谱”、“高显色”等关键词,其实这指的是台灯的某方面特性,所谓全光谱,就是指光线的光谱成分完全,与自然光别无二致。 我们都知道,一束自然太阳光不是由某个单一成分构成&#xff…

Briefings in Bioinformatics2021 | 药物挖掘分子设计--生成模型综述

原文标题:Molecular design in drug discovery: a comprehensive review of deep generative models 论文地址:Molecular design in drug discovery: a comprehensive review of deep generative models | Briefings in Bioinformatics | Oxford Academ…

35_DMA基本原理

目录 DMA简介 DMA框图 STM32的DMA有一下一些特征 DMA1控制器 DMA处理 数据方向 仲裁器 DMA通道 可编程的数据量 指针增量 循环模式 存储器到存储器模式 通道传输数据量 中断 通道配置过程 DMA简介 DMA全称Direct Memroy Access, 既直接存储器访问。 DMA传输将…

重编内核导致ubuntu有线连接不出现的问题

网卡是intel的i225v 千兆网卡,系统为ubuntu18.0.4,原始内核为5.4.0-135-generic,但是重新编译出错,不知道少了什么东西,也没去深究,重新下载了5.9.0的内核;结果重新编译内核重启有线网卡就不能用…

2.MyBatis环境搭建

数据准备 CREATE TABLE user (id int(11) NOT NULL,username varchar(30) NOT NULL,sex varchar(1) NOT NULL,birthday varchar(10) NOT NULL,address varchar(100) NOT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8;insert into user values(1,"steven&qu…

ADI Blackfin DSP处理器-BF533的开发详解2:开发环境的搭建

软硬件开发环境的搭建 纯流程化的东西,没什么技术含量,照着做就行了。 开发板和仿真器进行物理链接,也就是插上JTAG头。 特别特别特别注意,仿真器和开发板均不上电的情况下插JTAG头,不要带电插JTAG头,你…

ORB-SLAM2 ---- Frame::GetFeaturesInArea函数

目录 1.函数用处 2.步骤 3.code 4.函数解释 4.1 函数思想 4.2 代码解释 1.函数用处 找到在 以为中心,半径为的圆形内且金字塔层级在的特征点。 2.步骤 Step 1 计算半径为r圆左右上下边界所在的网格列和行的id Step 2 遍历圆形区域内的所有网格&#xff0c…

代码随想录Day44|完全背包、518.零钱兑换II、377.组合总和IV

文章目录完全背包518.零钱兑换II377.组合总和IV完全背包 文章链接:代码随想录 (programmercarl.com) 背包最大重量为4。 物品为:如果求组合数就是外层for循环遍历物品,内层for遍历背包。 如果求排列数就是外层for遍历背包,内层for循环遍历…

Linux多线程C++版(九) 线程同步和互斥-----线程信号量

目录1.基本概念2.信号量创建和销毁3.信号量加和减操作4.代码理解信号量5.信号量实例银行账户取款----实现互斥6.信号量实例计算和取结果----实现线程同步1.基本概念 信号量从本质上是一个非负整数计数器,是共享资源的的数目,通常被用来控制对共享资源的…

[附源码]JAVA毕业设计同学录网站(系统+LW)

[附源码]JAVA毕业设计同学录网站(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术&#…

从源码出发剖解正则表达式

✨✨hello,愿意点进来的小伙伴们,你们好呐! 🐻🐻系列专栏:【JavaSE】 🐲🐲本篇内容:详解正则表达式 🐯🐯作者简介:一名现大二的三非编程小白&…

[ MySQL ] 使用Navicat进行MySQL数据库备份 / 还原(备份.nb3文件方式)

本文主要讲解如何用Navicat(Navicat Premium ,或者Navicat for mysql)进行MySQL备份和恢复数据库。 本文主要大纲为:使用Navicat备份工具方式进行备份和还原,其中包括还原自身数据库和还原到其他目标库。 文章目录一、…

Jenkins 中 shell 脚本执行失败却不自行退出

Jenkins 中 执行 shell 脚本时,有时候 shell 执行失败了,或者判断结果是错误的,但是 Jenkins 执行完成后确提示成功 success 。 此时,可以通过条件判断来解决这个问题,让 Jenkins 强制退出并提示执行失败 failed 。 …

Tensorflow笔记

Tensorflow笔记基础概念计算图Eager Execution(即刻执行)eager模式下计算梯度基本使用tf.app加载flag(tf.app.flags)启动( tf.app.run )基础概念 计算图 Tensor(张量),在Tensorflow中可以理解…

畅聊两小时后谈谈chatGPT体验感受

文章目录背景注册聊天实录基于自然语言的SQL翻译shell解析k8s回答其他类型我的问题为何这么接近人类的回答?回答是离线的吗?背景 最近几周不管是T还是微信公众号,大家都在疯玩这个东西。 我姑且将这个应用叫小C吧。我和小C愉快的聊了几个小…

ComponentOne Studio Enterprise 2022

ComponentOne Studio Enterprise 2022 添加了Microsoft.NET 7支持。 FlexGrid for.NET MAUI预览版-您现在可以使用以前使用的相同.NET数据网格,只是它是为MAUI本机开发的,因此您不必学习多种移动开发平台。 WinForms 2022 v3中的新功能 增强的.NET 6控件…