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

embedded/2024/9/23 4:08:47/

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

相关文章

https网站安全证书的作用与免费申请办法

HTTPS网站安全证书,也称为SSL证书,网站通过申请SSL证书将http协议升级到https协议 HTTPS网站安全证书的作用 1 增强用户信任:未使用https协议的网站,用户访问时浏览器会有“不安全”弹窗提示 2 提升SEO排名:搜索引擎…

如何基于nginx搭建https网站

华子目录 使用nginx的http_ssl模块建立加密传输的网站查看配置文件ssl配置文件的主要参数实验:搭建nginxssl加密认证的web服务器 使用nginx的http_ssl模块建立加密传输的网站 查看 [rootserver ~]# nginx -V #查看是否有--with-http_ssl_module模块,如…

Django框架之视图层

一、三板斧的原理介绍 1、HttpResponse 在Django中,HttpResponse是一个类,用于构建HTTP响应并返回给客户端。当视图函数处理完请求后,需要返回一个响应时,就会使用HttpResponse对象。 (1)创建HttpRespon…

国产服务器操作系统部署NTP服务 _ 统信UOS _ 麒麟 _ 中科方德

原文链接:国产服务器操作系统部署NTP服务 | 统信UOS | 麒麟 | 中科方德 Hello,大家好啊!在保持服务器时间的精确同步方面,时间同步服务器(NTP服务器)扮演着至关重要的角色,它能确保系统操作的时…

万界星空科技商业开源MES+项目合作+商业开源低代码平台

今天我想和大家分享的是一套商业开源的 MES制造执行管理系统带源码。对于制造业而言,MES 是一个至关重要的系统,它可以帮助企业提高生产效率、优化资源利用、提高产品质量,从而增强市场竞争力。 什么是 MES? MES 是指通过计算机技…

使用 Docker 在 PyTorch 环境中训练模型

文章目录 准备工作构建 Docker 镜像运行 Docker 容器总结 在机器学习和深度学习任务中,使用 Docker 可以方便地构建和管理环境,特别是在涉及到复杂的依赖关系和 GPU 加速的情况下。本文将介绍如何使用 Docker 构建一个 PyTorch 环境,并在其中…

结构方程模型【SEM】:非线性、非正态、交互作用及分类变量分析

张老师(研究员),长期从事R语言结构方程模型、群落生态学、保护生物学、景观生态学和生态模型方面的研究和教学工作,已发表了多篇论文,拥有丰富的科研及实践经验。 利用结构方程模型建模往往遇到很多‘特殊’情况&…

2-手工sql注入(进阶篇) sqlilabs靶场1-4题

1. 阅读,学习本章前,可以先去看看基础篇:1-手工sql注入(基础篇)-CSDN博客 2. 本章通过对sqlilabs靶场的实战,关于sqlilabs靶场的搭建:Linux搭建靶场-CSDN博客 3. 本章会使用到sqlmap,关于sqlmap的命令&…