功能問題:如何防止接口重復請求?

大家好,我是大澈!

本文約?1400+ ?字,整篇閱讀約需?3?分鐘。

防止接口重復請求在軟件開發中非常重要,重復請求必然會導致服務器資源的浪費。

因為每次請求都需要服務器進行處理,如果請求是重復的,那么服務器就在做不必要的工作。在高并發的場景下,這種浪費會成倍增加,可能導致服務器性能下降,甚至引發服務崩潰。

所以,今天我們一起來聊一聊,如何防止接口重復請求?

七種實現方式

1、?請求隊列:維護一個請求隊列,每次發送請求前檢查隊列中是否已經存在相同的請求。如果存在相同請求,則不再發送,直接使用隊列中的請求結果。這種方法可以確保相同請求只發送一次。

class?RequestQueue?{??constructor()?{??this.queue?=?{};??}??addRequest(url,?callback)?{??if?(this.queue[url])?{??//?如果隊列中已有相同請求,則直接使用之前的請求結果??this.queue[url].callbacks.push(callback);??return;??}??this.queue[url]?=?{??callbacks:?[callback],??//?假設這里使用fetch進行請求??promise:?fetch(url).then(response?=>?{??const?data?=?response.json();??this.queue[url].callbacks.forEach(cb?=>?cb(data));??delete?this.queue[url];?//?請求完成后從隊列中移除??})??};??}??
}??//?使用??
const?queue?=?new?RequestQueue();??
queue.addRequest('https://api.example.com/data',?data?=>?{??console.log(data);??
});

2、?請求取消:在發送請求前,記錄當前正在進行的請求,并在發送新請求時先取消之前的請求。可以使用 Axios 等庫提供的取消請求功能來實現。

import?axios?from?'axios';??let?cancelTokenSource;??function?fetchData()?{??if?(cancelTokenSource)?{??cancelTokenSource.cancel('Operation?canceled?by?the?user.');?//?取消之前的請求??}??cancelTokenSource?=?axios.CancelToken.source();??axios.get('https://api.example.com/data',?{??cancelToken:?cancelTokenSource.token??}).then(response?=>?{??console.log(response.data);??}).catch(function?(thrown)?{??if?(axios.isCancel(thrown))?{??console.log('Request?canceled',?thrown.message);??}?else?{??//?處理錯誤??}??});??
}??//?調用fetchData時會取消之前的請求(如果存在)??
fetchData();

3、?防抖(Debounce):使用防抖函數控制請求的發送頻率,確保在一段時間內只發送一次請求。這樣可以避免頻繁的重復請求。

比較容易理解,代碼示例略了吧。

4、?節流(Throttle):與防抖類似,節流函數可以控制一段時間內請求的頻率,但不會像防抖那樣在每次觸發事件后立即執行,而是在固定間隔內執行一次。

比較容易理解,代碼示例略了吧。

5、?請求標識:為每個請求設置唯一標識,當新請求到來時,先檢查是否存在相同標識的請求,如果存在則不發送新請求。

比較容易理解,代碼示例略了吧。

6、?緩存請求結果:對于相同的請求,在第一次請求返回結果后將結果緩存起來,后續相同的請求可以直接使用緩存的結果,而不再發送重復請求。

比較容易理解,代碼示例略了吧。

7、?使用狀態管理庫:在 Vue 應用中,可以結合狀態管理庫(如 Vuex、Pinia)來管理請求狀態,確保只有一個請求在進行,避免重復請求。

//?Vuex?store配置??
const?store?=?new?Vuex.Store({??state:?{??isFetching:?false,??data:?null??},??mutations:?{??FETCH_START(state)?{??state.isFetching?=?true;??},??FETCH_END(state,?data)?{??state.isFetching?=?false;??state.data?=?data;??}??},??actions:?{??fetchData({?commit?})?{??if?(this.state.isFetching)?{??return;?//?如果已經在請求數據,則不再發送新請求??}??commit('FETCH_START');??return?fetch('https://api.example.com/data').then(response?=>?{??return?response.json();??}).then(data?=>?{??commit('FETCH_END',?data);??return?data;??});??}??}??
});??//?在Vue組件中使用??
this.$store.dispatch('fetchData').then(data?=>?{??console.log(data);??
});

收尾的時刻

程序員大澈,全網同名,感謝關注!

優質前后端領域公眾號博主,掘金年度人氣作者,抖音/小紅書/B站/頭條/知乎/CSDN等全網資深創作者,全網閱讀量100w+,專注于前后端技術知識分享。

加微信:CodeDache,交流學習,免費拉你進技術問答群。

關注微信公眾號:程序員大澈,文章首發,免費領取一份入行禮包。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23449.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23449.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23449.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

乘船過河(ship)

合肥市第33屆信息學競賽(2016年) 題目描述 Description 卡卡西和小朋友們要乘船過河了,港口有很多條船可以租到,并且之間沒有區別,每條船的出租費用也是一樣的。但是一條船最多只能乘坐兩個人,且乘客的總…

STM32 IIC 使用 HAL 庫操作eeprom

在STM32上通過I2C接口(注意:在標準STM32庫中,I2C接口通常被寫為"I2C"而不是"IIC")與EEPROM芯片通信時,你需要遵循I2C通信協議,并使用STM32的HAL庫或標準外設庫(如果適用&am…

tomcat配置請求的最大參數個數和請求數據大小

maxParameterCount"10000" maxPostSize"10485760" maxParameterCount:單個請求最大請求參數個數; maxPostSize:單個請求最大數據大小,1048576010M;

基本算法——位運算

a^b 原題鏈接&#xff1a;登錄—專業IT筆試面試備考平臺_牛客網 題目描述 運行代碼 #include<iostream> using namespace std; long long a,b,c,t1; int main() {cin>>a>>b>>c;for(;b;b/2){if(b&1)tt*a%c;aa*a%c;}cout<<t%c; } 代碼思路…

汽車軟件 OTA技術解析

汽車軟件 OTA 技術概述 在當今汽車行業中,軟件定義汽車的概念逐漸深入人心。隨著汽車智能化和網聯化的發展,汽車軟件的重要性日益凸顯。而汽車軟件 OTA(Over-the-Air)技術作為一種重要的軟件升級和維護方式,正逐漸成為汽車行業的熱點話題。 汽車軟件 OTA 技術是指通過無線…

邏輯回歸及python實現

概述 logistic回歸是一種廣義線性回歸&#xff08;generalized linear model&#xff09;&#xff0c;因此與多重線性回歸分析有很多相同之處。它們的模型形式基本上相同&#xff0c;都具有 w‘xb&#xff0c;其中w和b是待求參數&#xff0c;其區別在于他們的因變量不同&#x…

App Inventor 2 復制屏幕功能,界面設計更便捷,避免誤刪組件

“復制屏幕”功能全新上線&#xff0c;中文網獨有&#xff08;MIT沒有此功能&#xff09;&#xff0c;可以復制屏幕中的普通組件、圖片、附件、拓展、代碼塊。更多升級詳情可查看發布日志。 下面演示一下屏幕的復制效果&#xff1a; 1、Screen1屏幕上有若干組件、及一個SQLit…

美業SaaS系統源碼分享-收銀管理的主要功能

美業SaaS系統 連鎖多門店美業收銀系統源碼 多門店管理 / 會員管理 / 預約管理 / 排班管理 / 商品管理 / 活動促銷 PC管理后臺、手機APP、iPad APP、微信小程序 ? 博弈美業-收銀管理功能 1、同時支持支付寶和微信支付&#xff0c;具有簡單便捷安全等優點&#xff0c;并且符…

MySQL之查詢性能優化(八)

查詢性能優化 MySQL查詢優化器的局限性 MySQL的萬能"嵌套循環"并不是對每種查詢都是最優的。不過還好&#xff0c;MySQL查詢優化器只對少部分查詢不適用&#xff0c;而且我們往往可以通過改寫查詢讓MySQL高效地完成工作。還有一個好消息&#xff0c;MySQL5.6版本正…

Java開發注意事項

注意&#xff1a;測試類中使用Autowired注解注入Bean&#xff0c;不要使用RequiredArgsConstructor注解注入Bean 正確示范: import org.springframework.boot.test.context.SpringBootTest; import org.springframework.beans.factory.annotation.Autowired;SpringBootTest c…

Ffmpeg安裝和簡單使用

Ffmpeg安裝 下載并解壓 進入官網 (https://ffmpeg.org/download.html)&#xff0c;選擇 Window 然后再打開的頁面中下滑找到 release builds&#xff0c;點擊 zip 文件下載 環境變量配置 下載好之后解壓&#xff0c;找到 bin 文件夾&#xff0c;里面有3個 .exe 文件 然后復制…

中國互聯網第一人的故事__許榕生的不平凡的經歷

中國互聯網第一人的故事&#xff3f;&#xff3f;許榕生的不平凡的經歷 目錄 零 高考之際談高考成功者 一 幸運的高考考生 二 抓住時機考研上岸 三 當年連接互聯網的經過 四 互聯網進入中國的緣由 五 互聯網一誕生就顯神威 六 互聯網強國之路&#xff0c;我們在路上 零…

優思學院|六西格瑪黑帶官方的報考條件是什么?

經常有人私信問我六西格瑪黑帶證書要如何取得&#xff0c;要學歷證明嗎&#xff1f;要帶項目嗎&#xff1f;要注冊嗎&#xff1f; 首先&#xff0c;直接一點說&#xff0c;和任何學科一樣&#xff0c;取得六西格瑪證書的方法主要是通過上課學習和考試。然而&#xff0c;關于六…

fastapi實例

quick start 安裝 pip install fastapi# ASGI服務器&#xff0c;生成環境可以使用uvicorn pip install uvicorn代碼 from fastapi import FastAPI import uvicorn# 創建一個app實例 app FastAPI()# 編寫一個路徑操作裝飾器 app.get("/") # 編寫一個路徑操作函數 …

【ARM Cache 及 MMU 系列文章 6.2 -- ARMv8/v9 Cache 內部數據讀取方法詳細介紹】

請閱讀【ARM Cache 及 MMU/MPU 系列文章專欄導讀】 及【嵌入式開發學習必備專欄】 文章目錄 Direct access to internal memoryL1 cache encodingsL1 Cache Data 寄存器Cache 數據讀取代碼實現Direct access to internal memory 在ARMv8架構中,緩存(Cache)是用來加速數據訪…

Apple開發者macOS描述文件創建

1.選擇Profiles然后點擊加號創建 2.選擇類型為macOS App Development然后點擊繼續 3.選擇描述類型與App ID 然后點擊繼續 4.選擇證書然后點擊繼續 5.選擇設備,然后點擊繼續 6.輸入描述文件后,點擊生成 生成成功,點擊下載描述文件 下載完成會自動打開描述文件

評判基金的重要指標(一):最大回撤率

評判基金的重要指標&#xff08;一&#xff09;&#xff1a;最大回撤率 財富奇跡創造者2023-06-14 08:00山西 問&#xff1a;如果要投資一只基金&#xff0c;如何衡量自己可能面對的風險呢&#xff1f; 答&#xff1a;衡量一個策略的風險控制能力&#xff0c;“最大回撤”是…

Facechain系列: 通過代碼進行推理

進行推理時&#xff0c;需要編輯run_inference.py中的代碼。為了避免人物肖像的版權問題&#xff0c;文章中使用的圖片不是由FaceChain實際生成的圖片&#xff0c;特此說明。 1. 以下代碼適用于Linux系統&#xff0c;如果希望在Windows系統中運行&#xff0c; folder_path f…

lm studio 0.2.24國內下載模型

1.修改C:\Users\Admin\AppData\Local\LM-Studio\app-0.2.24\resources\app\.webpack\main中的3個js文件&#xff1a; index.js llmworker.js worker.js 中替換huggingface.co為hf-mirror.com。這樣就能實現搜索模型文件 2.點擊模型&#xff0c;選擇下載&#xff0c;出現下載…

C語言小例程6/100

題目&#xff1a;輸入三個整數x,y,z&#xff0c;請把這三個數由小到大輸出。 程序分析&#xff1a;我們想辦法把最小的數放到x上&#xff0c;先將x與y進行比較&#xff0c;如果x>y則將x與y的值進行交換&#xff0c;然后再用x與z進行比較&#xff0c;如果x>z則將x與z的值…