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

【VUE】如何管理重复请求

需求

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

实现思路

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

代码实现

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

requistDuplicateBlacklist.js

javascript 复制代码
export default [
    '/test/list&post',
    '/test/list&get',
    '/test/watch/.*&get'
]

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

然后我们封装一下axios

axios.js

javascript 复制代码
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中删除
}
)

效果

如图,当存在重复请求时,上一个请求将会被取消,只保留最后一次请求。

相关推荐
Brown.alexis7 小时前
es6知识点1-自备使用
前端·ecmascript·es6
小爬的老粉丝8 小时前
JavaScript 纯前端预览 WPS:先识别容器,再路由解析器
前端·javascript·wps
计算机魔术师8 小时前
新兴多智能体系统的模式与问题
前端
用户059540174469 小时前
AI Agent 上下文污染踩坑实录:用 pytest + Redis 揪出 3 类记忆串号 bug,排查 6 小时
前端·css
满栀5859 小时前
状态管理:Redux、Vuex、Pinia 核心区别
前端·javascript·typescript
一拳不是超人10 小时前
DeepSeek Harness 为什么敢说"一切皆插件"?拆透 Cordis 引擎的五大核心机制
前端·人工智能·agent
IT_陈寒10 小时前
Python的GIL让我多写了500行代码
前端·人工智能·后端
风骏时光牛马10 小时前
AI智能体能力调度微服务
前端
大龄码农有梦想11 小时前
Vue + BPMN.js + Camunda:搭建企业级流程设计器完整实践
javascript·vue.js·流程设计器·bpmn.js·bpmn·流程审批·工作流设计器
果果燕11 小时前
C++学习笔记(三):类与对象拓展学习笔记
java·服务器·前端