網站首頁 編程語言 正文
是什么偷走了我的網速
在項目中經常會遇到一個頁面中存在很多的請求,這時候如果切換頁面沒有處理的話請求依然會存在
這是非常影響性能的一件事,特別是在網絡情況不好的情況下,這只會讓用戶的網絡體現的更慢。往往這時候我們不會再去等待頁面慢慢的加載,這時候只會切換一個頁面或者不停的刷新。
解決方法
那么我們改如何解決這個問題呢?理論很簡單,在切換到下一個頁面之前取消之前的請求就可以了。那么我們怎么操作呢?
首先在axios的配置文件中加入以下代碼
其中最重要的就是下圖所示的這部分代碼:
掛載方式全憑你的個人喜好。
我把我的配置文件直接貼出來標出重點以供參考
import axios from 'axios';
import router from '../router/index'
import {
message
} from 'ant-design-vue';
// const $cookies = require('vue-cookies');
let service = axios.create({
// timeout: 5000,
baseURL: '/api'
// headers: {
// "Content-Type": "multipart/form-data"
// }
// headers: {
// 'Content-Type': 'application/x-www-form-urlencoded'
// }
})
service.interceptors.request.use(function (config) {
config.cancelToken = new axios.CancelToken(cancel => {
window._axiosPromiseArr.push({ cancel })
})
return config
})
service.interceptors.response.use(
response => {
const res = response.data;
if (res.code == 0 || res.code == 1) {
return res;
} else if (res.code === -1) {
message.warning(res.message)
}
return Promise.reject(res);
}
},
error => {
if (error.response.status === 403) {
// Message.error('未登錄或無權限訪問');
} else {
message.destroy();
message.error('請求失敗!請稍后再試或聯系管理員!');
}
return Promise.reject(error);
}
)
function exportFiles(url, method = "get", params = {}, data = {}) {
return new Promise((resolve, reject) => {
service({
url: url,
method: method,
params: params,
data: data,
crossDomain: true,
responseType: "blob",
headers: {
'Content-Type': 'application/json'
},
})
.then(res => {
resolve();
if (res && res.headers) {
let fileName = res.headers['content-disposition'];
let name = decodeURI(
fileName
.split("=")[1]
.replace('"', "")
.split(".")[0]
);
let format = decodeURI(
fileName
.split("=")[1]
.replace('"', "")
.split(".")[1]
.replace('"', "")
);
var blob = res.data;
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onload = function (e) {
if ("download" in document.createElement("a")) {
var a = document.createElement("a");
a.download = name + '.' + format;
a.href = e.target.result;
a.click();
} else {
navigator.msSaveBlob(blob, name + '.' + format)
}
resolve();
};
} else {
reject();
}
})
.catch(err => {
reject(err);
})
})
}
class Service {
Get(url, data = {}) {
return service({
url: url,
method: 'get',
params: data,
})
};
Post(url, data = {}) {
return service({
url: url,
method: 'post',
data: data
})
};
Postfile(url, data = {}) {
return service({
url: url,
method: 'post',
data: data,
headers: {
'Content-Type': 'multipart/form-data'
}
})
};
Put(url, data = {}) {
return service({
url: url,
method: 'put',
data: data,
})
};
Delete(url, data = {}) {
return service({
url: url,
method: 'delete',
data: data,
})
}
}
export default new Service();
第二步:通過路由守衛來取消請求
在你的router配置文件中寫上如下代碼即可
代碼如下
window._axiosPromiseArr = []
router.beforeEach((to, from, next) => {
window._axiosPromiseArr.forEach((ele, index) => {
ele.cancel()
delete window._axiosPromiseArr[index]
})
next()
})
就此完成了切換頁面取消之前所有請求的需求
想要知道的更多請移步至axios官方文檔
原文鏈接:https://blog.csdn.net/weixin_45366905/article/details/110134795
相關推薦
- 2022-03-19 docker部署安裝jenkins的實現步驟_docker
- 2022-08-13 socket:REUSEADDR與REUSEPORT選項
- 2023-01-14 ubuntu端向日葵鍵盤輸入卡頓問題及解決_Linux
- 2022-08-04 GoFrame框架gcache的緩存控制淘汰策略實踐示例_Golang
- 2022-07-11 MongoDB分片方式及片鍵選擇
- 2022-10-03 react實現數據監聽方式_React
- 2022-09-02 R語言數據結構之矩陣、數組與數據框詳解_R語言
- 2022-11-13 C語言在輸入輸出時遇到的常見問題總結_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支