前端高并发的出现场景及解决方法——技能提升——p-limit的使用

devtools/2025/1/16 2:57:39/

最近在写后台管理系统的时候,遇到一个场景,就是打印的页面需要根据传入的多个id,分别去请求详情接口。

比如id有10个,则需要调用10次详情接口获取到数据,最后对所有的数据进行整合后页面渲染。

相信大家或多或少都遇到过前端高并发的场景,需要发送大量的http请求,如果直接将所有的请求都放入浏览器queue中排队的话,势必会造成浏览器卡顿或者崩溃,这时候就需要一种机制来做控制。

在这里插入图片描述
下面介绍两种方法来处理高并发的场景:

图中的详情id是从链接路由上拿到的,

const id = this.$route.query.id;
this.pageIds = id.split(',');

接口定义的方法:通过async异步处理接口,这样实现异步同时请求接口

export async function getProSendOutSheets(id) {return request(`/api/production-service/proSendOutSheets/${id}`, METHOD.GET);
}

解决方法1:通过async await串行处理

async getProSendList(){let listDB = [];for(let i in this.pageIds){await getProSendOutSheets(this.pageIds[i]).then(res=>{if(res.success){let db = res.data;list.push(db);}})}//此处的listDB就是最后整合的数据
}

下面找了网上的一个同样串行处理的效果图:
在这里插入图片描述

从图中可以看出请求是一条发送完成才会接着下一条发送,上面的时间看板显示请求是在一条线上的,因为用了keep-alive,复用同一条TCP链接,超长的 stalled 已经不存在了,但是这么请求的效率显然太慢了

解决方法2:并发控制——使用p-limit插件

npm install p-limit

使用方法如下:

import PLimit from 'p-limit'// 限制五条并发
const pLimit = PLimit(5)
async getProSendList(){let listDB = [];for(let i in this.pageIds){listDB.push(pLimit(getProSendOutSheets(this.pageIds[i]).then(res=>{if(res.success){let db = res.data;return db;}})))}await Promise.all(listDB);//此处的listDB就是最后整合的数据
}

在这里插入图片描述
至此达到我们最终想要的效果,一个可控的并发请求,即能控制并发数也不会出现超长的 stalled 阻塞后续请求

总结:

高并发请求不做限制时,会导致后续请求阻塞,甚至浏览器卡顿或崩溃
解决方法1、串行逐条发送,并发请求慢,整体耗时太长
解决方法2、并发控制,目前较好的处理方式

多多积累,多多收获!!!


http://www.ppmy.cn/devtools/23062.html

相关文章

uniapp自定义返回事件(封装)

uniapp自定义返回事件 在我们使用uniapp时,我们导航栏一般都是自定义的,比如用uview框架的导航栏,那么返回事件通常会遇到以下几个问题 返回事件前需要做一些额外的处理 h5项目刷新页面后返回失效 返回按钮点击后到指定页面 如果只是监听返…

信息系统项目管理师——第5章信息系统工程(一)

近几期的考情来看,本章选择题稳定考4分,考案例的可能性有,需要重点学习。本章节专业知识点特别多。但是,只考课本原话,大家一定要把本章至少通读一遍,还要多刷题,巩固重点知识。 1 软件工程 软…

React中,双花括号和单花括号的区别

在React中,花括号 {} 用于在JSX中插入JavaScript表达式。 单花括号 {}:通常用于在JSX中嵌入JavaScript表达式。这些表达式可以是变量、函数调用、对象字面量、数组等。React会评估这些表达式,并将结果插入到JSX中。 例如,在你的代…

JavaScript-Vue入门

本文主要测分享Vue的一些基础 Vue简介 Vue.js 是一个构建数据驱动的 web 界面的渐进式框架。它的主要目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 下是一些 Vue 的主要特点和概念: 1. 响应式数据绑定:Vue 使用基于 HTML 的模板语法…

《刺客信条:代号红》疑似将于今年推出

听说《刺客信条:代号红》似乎已经确认将在今年发布,带来了许多令人期待的内容。该游戏使用了名为“Anvil Pipeline”的重大引擎改进,将在图形效果方面有所提升,包括光线追踪全局照明和虚拟几何的线条等。 游戏玩法方面&#xff0c…

搜索引擎的定义与运行原理

搜索引擎是一种用于在互联网或特定数据源中搜索信息的工具,它通过自动化程序(称为爬虫或蜘蛛)从网页或数据库中收集信息,并根据用户输入的关键词或短语返回相关的搜索结果。其运行原理可以简单概括如下: 爬取网页&…

瓦片编辑器成功移植到小熊猫C++ 2.25.1版本,解决_findnext移植问题

移植之后出现绿色屏幕闪退 查了版本回滚直到不闪退,发现是在读取自定义文件上出问题 然后在找读取自定义文件函数,发现是读取图片部分出问题 然后就卡住了 调试半天,不是数据溢出,于是就看 函数_findnext,网上搜 ———_findn…

workminer之dht通信部分

workminer是通过SSH爆破传播的挖矿木马,感染后会释放xmrig挖矿程序利用主机的CPU挖取北方门罗币。该样本能够执行特定的指令,指令保存在一个配置文件config中,config文件类似于xml文件,里面有要执行的指令和参数,样本中…