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

news2024/11/25 2:38:48

最近在写后台管理系统的时候,遇到一个场景,就是打印的页面需要根据传入的多个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.coloradmin.cn/o/1632702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis 插件介绍及应用

MyBatis 插件介绍及应用 MyBatis 是一个持久层框架,它允许开发者自定义 SQL 语句并将其映射到 Java 对象中。MyBatis 提供了一种灵活的数据库操作方式,但随着项目的复杂度增加,一些通用功能如分页、缓存、事务管理等可能需要重复编写。为了解…

仅1年!!影响因子10+飙升至30+,Springer旗下的潜力优刊,未来可期!

【SciencePub学术】今天小编给大家带来了一本医学类的高分优刊解读,隶属于Springer出版社,JCR1区,中科院1区TOP,创刊时间不长,但影响因子仅1年时间从10直接飙升至30,领域相符的学者可考虑! Sign…

PaddlePaddle与OpenMMLab

产品全景_飞桨产品-飞桨PaddlePaddle OpenMMLab算法应用平台

基于LEAP模型的碳排放建模及行业、区域、国家等层面实践应用

线上方式:腾讯会议; 本期共计8次直播课,每节3小时。 5月24日-5月26日 每天(8:30-11:30)腾讯会议直播 5月31日-6月02日 每天(8:30-11:30)腾讯会…

Android 多媒体处理中ByteBuffer使用注意事项

Android多媒体处理中ByteBuffer使用注意事项 ByteBuffer 是 Java 中用来操作原始字节数据的类,它提供了一种灵活的方式来读取、写入和操作字节数据。以下是关于 ByteBuffer 的详细说明: 创建 ByteBuffer 你可以通过几种方式来创建 ByteBuffer&#xf…

新接口上线啦,近期我们增加了九个接口

天行数据近期新增了独立计次类接口:食物营养识别、数字识别、条形码识别和会员免费类接口:全国常用电话、健康小妙招、多音字查询、国际时区查询、英语格言等。 1、食物营养识别 通过输入图像资源,识别近两千种常见食物的详细营养成分及100…

转换图片为jpg格式?几个一键转换格式的方法

现在图片格式越来越多,我们经常需要对一些不符合要求的图片进行图片格式转换,否则就会出现打不开或者无法编辑处理的情况,那么对于一些不太懂电脑的小伙伴来说图片转格式会比较复杂,今天小编就来教大家几个简单的改变图片格式的方…

mars3d开发过程中点击面图层飞行定位,设置俯仰角度后,layer.flyTo({没有生效的排查思路

mars3d开发过程中点击面图层飞行定位,设置俯仰角度后,layer.flyTo({没有生效的排查思路记录,给大家提供一下以后排查定位问题的方向 问题场景相关代码: 1.项目本身代码: 2.精简了关键性代码后,就可以去ge…

【测试100问】面试:说说你印象最深的BUG,举个例子

一、场景 面试时被问,你印象中最深刻的 BUG是什么? 举个例子说明一下。 该如何回答比较好呢? 二、面试考察点 面试官问这道题,除了考察你发现问题的能力,还有你的表达能力、深度思考能力、归纳总结能力。 千万不要…

基于51单片机智能窗帘仿真设计( proteus仿真+程序+设计报告+讲解视频)

基于51单片机智能窗帘仿真设计( proteus仿真程序设计报告讲解视频) 基于51单片机智能窗帘仿真设计 1. 主要功能:2. 讲解视频:3. 仿真设计4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单资料下载链接: 仿真图proteus8.9及以上…

学习周报:文献阅读+Fluent案例+有限体积法理论学习

目录 摘要 Abstract 文献阅读:基于物理信息神经网络的稀疏数据油藏模拟 文献摘要 文章讨论|结论 各方程和原理简介 PINN简介 域分解 实验设置 单相油藏问题 油水两相问题 Fluent实例:Y型弯管中的流体混合分析 几何建模部分 网格划分 求解器设…

举个栗子!Tableau 技巧(272):学做曲线面积图(Sigmoid area charts)

曲线面积图(Sigmoid area charts)是区域图的一种创新变形,呈现数据随时间变化的情况,也可用于对数据总值趋势的洞察。 如何在 Tableau 中具体实现呢?今天的栗子,一睹为快吧! 本期《举个栗子》…

相关运算及实现

本文介绍相关运算及实现。 相关运算在相关检测及数字锁相放大中经常用到,其与卷积运算又有一定的联系,本文简要介绍其基本运算及与卷积运算的联系,并给出实现。 1.定义 这里以长度为N的离散时间序列x(n),y(n)为例,相关运算定义如…

2024 年 6 款最佳高清屏幕录像机,用于录制和共享

为了获得令人惊叹和详细的视频,一个优秀的高清屏幕 录像机是必不可少的。高清录像机广泛用于录制研讨会、会议、培训课程,甚至视频游戏。顶屏摄像头通常包含视频编辑、动画和 4K 录制等尖端功能和高端效果。 市场上有大量适用于 Windows 和 Mac 的屏幕录…

冯喜运:4.29黄金原油多空争夺,今日操作建议走势分析

【黄金消息面分析】:周一(4月29日)亚市早盘,现货黄金窄幅震荡,目前交投于2328美元/盎司。金价上周五反弹受阻,收报2337.36美元/盎司,此前数据显示美国物价升幅符合预期;随着中东危机…

认识及创建线程(Thread)

1 概念 1.1线程是什么 线程是CPU调度的基本单位,它是在进程内部运行的执行流,线程比进程粒度更细,调度成本更低 一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行着多…

git 命令怎么回退到指定的某个提交 commit hash 并推送远程分支?

问题 如下图,我要回退到 【002】Babel 的编译流程 这一次提交 解决 1、先执行下面命令,输出日志,主要就是拿到提交 commit 的 hash,上图红框即可 git log或者 vscode 里面直接右击,copy sha 2、执行下面命令回退 g…

AOMEI Partition Assistant傲梅分区助手技术员版:专业级的硬盘分区利器

在数字化时代,数据存储和管理变得愈发重要。对于电脑技术员而言,一款功能强大、操作简便的分区工具无疑是提高工作效率的得力助手。而傲梅分区助手技术员版(AOMEI Partition Assistant)正是这样一款备受赞誉的专业级硬盘分区软件。…

9种单片机常用的软件架构

长文预警,加代码5000多字,写了4个多小时,盘软件架构,这篇文章就够了! 可能很多工程师,工作了很多年,都不会有软件架构的概念。 因为我在做研发工程师的第6年,才开始意识到这个东西,在…

【Linux】对信号产生的内核级理解

一、键盘产生信号 键盘产生信号这里就要涉及一个重要的概念了,叫硬件中断。我这里会粗粒度地说一下键盘产生信号,以及信号被上层软件读到的过程,只是说一下我自己的理解。 1.1、硬件中断 硬件中断是计算机中的一种机制,它允许硬件…