最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

react+antd4實(shí)現(xiàn)優(yōu)化大批量接口請(qǐng)求

 更新時(shí)間:2024年02月05日 15:27:33   作者:某哈壓力大  
這篇文章主要為大家詳細(xì)介紹了如何使用react hooks + antd4實(shí)現(xiàn)大批量接口請(qǐng)求的前端優(yōu)化,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

背景

接到一個(gè)需求,需要做一個(gè)運(yùn)維的功能,對(duì)公司下平臺(tái)子系統(tǒng)做一個(gè)開關(guān)界面,要求可以大批量對(duì)系統(tǒng)進(jìn)行修改。這樣大批量的修改,如果有個(gè)老哥手一抖點(diǎn)了全選,那可能同時(shí)會(huì)發(fā)送幾十上百個(gè)接口,對(duì)瀏覽器和服務(wù)器都會(huì)是一個(gè)比較大的負(fù)擔(dān)。

相似的應(yīng)用場(chǎng)景還有:文件批量上傳等

使用技術(shù)棧:react hooks + antd4

分析

維護(hù)一個(gè)任務(wù)池,先默認(rèn)發(fā)出最大并發(fā)數(shù)量的接口請(qǐng)求,一個(gè)蘿卜一個(gè)坑,當(dāng)上一個(gè)請(qǐng)求結(jié)束(無論成功失?。?,則讓下一個(gè)請(qǐng)求進(jìn)入任務(wù)隊(duì)列,之道所有請(qǐng)求列表都請(qǐng)求完成,返回這個(gè)任務(wù)池的最終結(jié)果。

部分代碼實(shí)現(xiàn)

主要業(yè)務(wù)邏輯

// ... 點(diǎn)擊確定,先進(jìn)行前置校驗(yàn)
const onSubmitHandle = (event) => {
    event.preventDefault(); // 防止觸發(fā)原生submit,導(dǎo)致瀏覽器頁面刷新
    validateFields((err, values) => {
        // 校驗(yàn)通過
        if(!err){
            // 通過遍歷組裝參數(shù)
            const arrParam = concateDynamicParams(values);
            concurrentControl(arrParm, 5)
            .then(res)=> {
                // 獲取成功列表和失敗列表
                const { sucSystem, faildSystem } = getSucAndFailedResult(res);
                const content = (
                  <p>
                     {'修改成功的系統(tǒng):'}
                     <br />
                     {`${sucSystem}`}
                     <br />
                     {'修改失敗的系統(tǒng):'}
                     <br />
                     {`${faildSystem}`}   
                  </p>
                );
                Modal.info({
                    title: "提示",
                    content,
                    oKText: "確定",
                })
                // 取消loading,重置列表等操作...
            }
        }
    })
}

維護(hù)任務(wù)池,控制并發(fā)數(shù)

const concurrentControl = (arrParam, maxNum = 10) => 
	new Promise((resolve) => {
        // 無任務(wù)數(shù)據(jù)時(shí)
        if(!arrParam.length){
            resolve([]);
            return;
        }
        const results = []; // 最終的結(jié)果集合,用于保存接口返回的信息
        let index = 0; // 用于記錄下一個(gè)接口下標(biāo)
        let count = 0; // 用于記錄發(fā)送了多少條數(shù)據(jù)
        
        
        
        const request = async () => {
            if(index === arrParam.length) return; // 出口
            const i = index; // 當(dāng)前下標(biāo)(備份)
            // 組裝請(qǐng)求路徑與參數(shù)
            const url = arrParam[i].url;
            const param = arrParam[i].data;
            index++; // 預(yù)先記錄下一個(gè)請(qǐng)求的下標(biāo)
            try{
                // 發(fā)送請(qǐng)求
                const resp = await dispatchSqlGuardSwitchProcess(url, param);
                result[i] = resp; // 記錄返回結(jié)果
            } catch( error ){
                result[i] = error;
            } finally {
                count++ ; // 當(dāng)前接口完成,下一個(gè)接口調(diào)用開始
                if(count === arrParam.length){ // 全部任務(wù)池中的接口都調(diào)用完畢
                    resolve(results)
                }
                request()(); // 繼續(xù)下一個(gè)請(qǐng)求
            }    
        }
        
        // 初始化請(qǐng)求數(shù)
        const maxParallelRequests = Math.min(maxNum, arrParam.length);
        for(let i = 0; i < maxParallelRequests; i++){
            request()
        }
         
    })

總結(jié)

核心思想是一個(gè)蘿卜一個(gè)坑,直到所有的蘿卜都從坑里出來。(誤)

通過維護(hù)一個(gè)任務(wù)池,標(biāo)記當(dāng)前請(qǐng)求,下一個(gè)請(qǐng)求,以及當(dāng)前總共請(qǐng)求的次數(shù),便可以做到前端控制并發(fā)的需求場(chǎng)景。

參考資料:關(guān)于前端:如何實(shí)現(xiàn)并發(fā)請(qǐng)求數(shù)量控制?

到此這篇關(guān)于react+antd4實(shí)現(xiàn)優(yōu)化大批量接口請(qǐng)求的文章就介紹到這了,更多相關(guān)react優(yōu)化請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React組件的用法概述

    React組件的用法概述

    React組件用來實(shí)現(xiàn)局部功能效果的代碼和資源的集合(html/css/js/image等等),這篇文章主要介紹了React組件的用法和理解,需要的朋友可以參考下
    2023-02-02
  • React RenderProps模式超詳細(xì)講解

    React RenderProps模式超詳細(xì)講解

    render props是指一種在 React 組件之間使用一個(gè)值為函數(shù)的 prop 共享代碼的技術(shù)。簡(jiǎn)單來說,給一個(gè)組件傳入一個(gè)prop,這個(gè)props是一個(gè)函數(shù),函數(shù)的作用是用來告訴這個(gè)組件需要渲染什么內(nèi)容,那么這個(gè)prop就成為render prop
    2022-11-11
  • React hook超詳細(xì)教程

    React hook超詳細(xì)教程

    Hook是React16.8的新增特性。它可以讓你在不編寫class的情況下使用state以及其他的React特性,這篇文章主要介紹了React hook的使用
    2022-10-10
  • 一文帶你深入理解React中的Context

    一文帶你深入理解React中的Context

    React?Context是React提供給開發(fā)者的一種常用的狀態(tài)管理機(jī)制,本文主要來和大家講講為什么需要Context,又是如何使用Context的,感興趣的可以了解一下
    2023-05-05
  • React Native 如何獲取不同屏幕的像素密度

    React Native 如何獲取不同屏幕的像素密度

    這篇文章主要介紹了 React Native 如何 獲取不同屏幕的像素密度的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 一文教會(huì)你用redux實(shí)現(xiàn)computed計(jì)算屬性

    一文教會(huì)你用redux實(shí)現(xiàn)computed計(jì)算屬性

    在computed中,可以定義一些屬性,即計(jì)算屬性,下面這篇文章主要給大家介紹了關(guān)于如何利用redux實(shí)現(xiàn)computed計(jì)算屬性的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 30分鐘精通React今年最勁爆的新特性——React Hooks

    30分鐘精通React今年最勁爆的新特性——React Hooks

    這篇文章主要介紹了30分鐘精通React今年最勁爆的新特性——React Hooks,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • 編寫簡(jiǎn)潔React組件的小技巧

    編寫簡(jiǎn)潔React組件的小技巧

    這篇文章主要介紹了編寫簡(jiǎn)潔React組件的小技巧,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-04-04
  • React中的Hooks進(jìn)階理解教程

    React中的Hooks進(jìn)階理解教程

    這篇文章主要介紹了React中的Hooks進(jìn)階理解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 完美解決react-codemirror2?編輯器需點(diǎn)擊一下或者延時(shí)才顯示數(shù)據(jù)的問題

    完美解決react-codemirror2?編輯器需點(diǎn)擊一下或者延時(shí)才顯示數(shù)據(jù)的問題

    這篇文章主要介紹了react-codemirror2編輯器需點(diǎn)擊一下或者延時(shí)才顯示數(shù)據(jù)的問題,解決方法也很簡(jiǎn)單,需要手動(dòng)引入自動(dòng)刷新的插件,配置一下參數(shù)就可以了,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08

最新評(píng)論

城步| 绥阳县| 玉门市| 沅江市| 息烽县| 朝阳区| 望都县| 濮阳县| 溆浦县| 屏南县| 彭泽县| 庆安县| 芷江| 中宁县| 黑水县| 云龙县| 防城港市| 同仁县| 丽江市| 昌乐县| 怀仁县| 甘谷县| 莱西市| 永年县| 远安县| 抚宁县| 鄂州市| 博湖县| 淄博市| 新竹县| 兰考县| 堆龙德庆县| 政和县| 东方市| 澎湖县| 连城县| 石泉县| 安西县| 巴彦淖尔市| 阳春市| 山东|