【VUE】如何有效管理重复请求

news2024/11/16 1:43:44

【VUE】如何管理重复请求

需求

重复的HTTP请求可能对应用程序性能造成很大影响,尤其是在用户快速点击或多次触发同一操作时。在Vue应用中,我们可以使用axios的请求拦截器(interceptors)配合AbortController来取消重复的HTTP请求

实现思路

通过使用axios的拦截器和AbortController API追踪并取消重复的HTTP请求,为每个请求生成唯一标识符,并在发现重复请求时使用AbortController的abort方法取消之前的请求,从而优化了网络性能并提升了用户体验。

代码实现

先创建一个文件来储存需要管理的API地址
requistDuplicateBlacklist.js

export default [
    '/test/list&post',
    '/test/list&get',
    '/test/watch/.*&get'
]

使用&符号分割了请求地址与请求方式;当地址上有动态变化的部分时用.*代替,方便稍后的正则匹配;

然后我们封装一下axios
axios.js

import axios from 'axios';
import requistDuplicateBlacklist from './requistDuplicateBlacklist'
//初始化window.cancelTokenSources变量
if(!window.cancelTokenSources){
  window.cancelTokenSources={}
}
// request拦截器
service.interceptors.request.use(
(config) => {
    let key = config.url+'&'+config.method;
    for(let item of requistDuplicateBlacklist){
      const regex = new RegExp('^' + item + '$');
      const isMatch = regex.test(key);
      if(isMatch){
        if(window.cancelTokenSources[key]){
          //如果之前有未完成请求,先中断
          window.cancelTokenSources[key].abort()
        }
        let controller = new AbortController();
        window.cancelTokenSources[key] = controller;//将要管理的请求储存在window.cancelTokenSources内
        config.signal = controller.signal
        break;
      }
    }
    ...
)
// 响应拦截器
service.interceptors.response.use(
(res) => {
let key = res.config.url+'&'+res.config.method;
    delete window.cancelTokenSources[key];//请求结束,从window.cancelTokenSources中删除
}
)

效果

在这里插入图片描述
如图,当存在重复请求时,上一个请求将会被取消,只保留最后一次请求。

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

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

相关文章

【漏洞复现】CloudPanel makefile接口远程命令执行漏洞(CVE-2023-35885)

文章目录 前言声明一、CloudPanel 简介二、漏洞描述三、影响版本四、漏洞复现五、修复建议 前言 CloudPanel 是一个基于 Web 的控制面板或管理界面,旨在简化云托管环境的管理。它提供了一个集中式平台,用于管理云基础架构的各个方面,包括 &a…

【开源】基于JAVA语言的新能源电池回收系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户档案模块2.2 电池品类模块2.3 回收机构模块2.4 电池订单模块2.5 客服咨询模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 E-R 图设计 四、系统展示五、核心代码5.1 增改电池类型5.2 查询电池品类5.3 查询电池回…

k8s集群异常恢复

前提、我自己的k8s采用的是单master节点两个从节点部署,我针对单master情况进行恢复说明 场景一:正常开关虚拟机,可直接重启kubelet进行恢复 1、1、一般重启后三个节点都需要检查,输入命令检查kubelet: systemctl s…

计算机网络-TCP/IP模型及五层参考模型(OSI与TCP/IP相同点 不同点 5层参考模型及数据封装与解封装)

文章目录 OSI与TCP/IPOSI与TCP/IP相同点OSI与TCP/IP不同点5层参考模型5层参考模型的数据封装与解封装小结 OSI与TCP/IP OSI:先理论,但没有实践 TCP/IP:先实践,再理论 TCP/IP:基于协议栈而分层 网络接口层:…

IDEA 2023.3.2 安装教程

1.下载2023.3.2版本IDEA 链接:https://pan.baidu.com/s/1RkXBLz6qxsd8VxXuvXCEMA?pwd5im6 提取码:5im6 2.安装 3.解压文件,进入,选择方式3 4.将下面文件夹复制到任意位置(不要有中文路径) 5.进入下面文…

CmakeList教程

一、CmakeList介绍: cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。它会通过写的语句自动生成一个MakeFile,从而实现高效编译 二、CmakeList的常用指令 1.指定…

DevOps系列文章之 GitLab Runner

Runner Runner就像一个个的工人,而Gitlab-CI就是这些工人的一个管理中心,所有工人都要在Gitlab-CI里面登记注册,并且表明自己是为哪个工程服务的。当相应的工程发生变化时,Gitlab-CI就会通知相应的工人执行软件集成脚本。如下图所…

优维全面可观测产品能力分解①:架构可观测

2023年,基于客户需求的洞察,历经1年的潜心优化,优维在第四季度推出集大成产品——「全面可观测解决方案」,涵盖架构可观测、故障可观测、变更可观测、用户可观测、应用服可观测、资源可观测、运维状态可观测等不同场景的可观测能力…

使用 Vector 在 Kubernetes 中收集日志

多年来,我们一直在使用 Vector 在我们的 Kubernetes 平台中收集日志,并成功地将其应用于生产中以满足各种客户的需求,并且非常享受这种体验。因此,我想与更大的社区分享它,以便更多的 K8s 运营商可以看到潜力并考虑他们…

Multisim14.0仿真(三十八)基于74ls190的电子计时器设计

一、仿真原理图: 二、仿真效果: 三、时钟源按所需调整。

[python]使用pyqt5搭建yolov8钢筋计数一次性钢材计数系统

【官方框架地址】 github地址:https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov8是一种先进的深度学习模型,用于目标检测和识别。在钢筋计数任务中,Yolov8可以有效地识别和计数图像中的钢筋。下面是对如何使用Yolov8实现钢筋…

一本满是错误的Go语言书,凭什么1000万人都在读

犯错是每个人生活的一部分。正如爱因斯坦曾说过:一个从未犯过错的人从未尝试过新东西。 最重要的不是我们犯了多少错误,而是我们从错误中学到了多少东西。 这个观点同样适用于编程领域。 我们从一门编程语言中获取经验不是一个神奇的过程,…

Rocky Linux 8.9 安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任,图解仅供参考,请悉知!本次安装图解是在一个全新的演示环境下进行的,演示环境中没有任何有价值的数据,但这并不代表摆在你面前的环境也是如此。生产环境…

【大数据处理技术实践】期末考查题目:集群搭建、合并文件与数据统计可视化

集群搭建、合并文件与数据统计可视化 实验目的任务一:任务二: 实验平台实验内容及步骤任务一:搭建具有3个DataNode节点的HDFS集群集群环境配置克隆的方式创建 Slave 节点修改主机名编辑 hosts 文件生成密钥免认证登录修改 hadoop 的配置文件编…

CentOS 7 安装配置MySQL

目录 一、安装MySQL​编辑​编辑 1、检查MySQL是否安装及版本信息​编辑 2、卸载 2.1 rpm格式安装的mysql卸载方式 2.2 二进制包格式安装的mysql卸载 3、安装 二、配置MySQL 1、修改MySQL临时密码 2、允许远程访问 2.1 修改MySQL允许任何人连接 2.2 防火墙的问题 2…

Linux操作系统IPC之—SYSTEM V共享内存

文章目录 共享内存的简介共享内存示意图 共享内存数据结构共享内存用到的函数具体的代码最终运行图 共享内存的简介 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过…

请你来了解一下Mysql-InnoDB中事务的两段式提交

欢迎订阅专栏,了解更多Mysql的硬核知识点,原创不易,求打赏 ACID:事务的四个特性 A:原子性 原子性表示把一个事务中所有的操作视为一个整体,要么全部成功,要么全部失败,是事务模型区…

《WebKit 技术内幕》学习之七(3): 渲染基础

3 渲染方式 3.1 绘图上下文(GraphicsContext) 上面介绍了WebKit的内部表示结构,RenderObject对象知道如何绘制自己,但是,问题是RenderObject对象用什么来绘制内容呢?在WebKit中,绘图操作被定…

2024.1.22(150. 逆波兰表达式求值)

2024.1.22(150. 逆波兰表达式求值) 相信看完动画大家应该知道,这和1047. 删除字符串中的所有相邻重复项是差不错的,只不过本题不要相邻元素做消除了,而是做运算! // 定义一个Solution类 class Solution { // 定义一个公共方法…

GoZero微服务个人探究之路(八)-[mysql数据库]如何拓展由goctl生成的model代码里的方法

前言 goctl生成的方法只有四个: insert,update,findone,delete, 事实上很多时候这是不够用的,同时生成的这四个方法也很简单,业务逻辑一复杂就做不了了,需要我们自己去实现自己想…