前端高并发请求该怎么做?手摸手做实践

ABAQUS单元刚度矩阵输出全攻略:从理论到实践(含MTX/DAT文件对比) 本文详细解析了ABAQUS中单元刚度矩阵的输出方法,涵盖理论原理、MTX与DAT文件格式对比及二次开发应用。通过具体操作步骤和性能优化建议,帮助用户高效获取并利用刚度矩阵数据,特别适合需要进行有限元分析验证和二次开发的工程师。 阅读详情

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

模拟实现

假设场景:需要发送100个请求,每个请求的时间不固定。

1、简单的前端请求

js

复制代码

const fetchData = () => { fetch('http://127.0.0.1:3000').then(res => { return res }) } for (let i = 0; i < 100; i++) { fetchData() }

2、简单启动个服务


js

复制代码

const http = require('http') const server = http.createServer((req, res) => { // 简单cors res.writeHead(200, { 'Content-Type': 'text/plain', 'Access-Control-Allow-Origin': '*' }) // 0~1s 随机时间 setTimeout(() => { res.end('Hello World!') }, Math.random() * 1000) }) server.listen(3000, () => { console.log('Server is running on port 3000'); })

正常不做控制

发动机点火!!!

image.png

可以看到后面的请求 Stalled 时间比较长了,已经达到8秒,说明有大量的请求在queue中排队等待sent,会阻塞后续一些重要的请求,可能导致超时失败等问题。由于我们模拟请求数量不多且接口数据量小,所以浏览器并没有出现崩溃的情况,如果数量和数据量上去了,卡顿或崩溃的情况势必会发生!

串行控制

1、逐条发送

稍微改造一下前端代码


js

复制代码

const fetchData = async () => { await fetch('http://127.0.0.1:3000').then(res => { return res }) } const sent = async () => { for (let i = 0; i < 100; i++) { await fetchData() } }

启动~~~

动画.gif

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

2、分组发送

将五个请求分为一组,一组接着一组串行发送。这个“五”是怎么怎么得出来的呢,chrome默认限制同时最多开启六条TCP链接,所以我将其分为五条一组,留一条处理别的请求。

改造一下请求代码


js

复制代码

const sent = async () => { for (let i = 0; i < 100; i+= 5) { // 分组执行 const exec = [ fetchData(i), fetchData(i + 1), fetchData(i + 2), fetchData(i + 3), fetchData(i + 4) ] await Promise.all(exec) } }

再次启动~~~

动画.gif

可以看出请求确实是按照五条一组的方式进行发送了,速度也比之前逐条发送快了不少,但是从时间看板上显示一组中有些请求快有些请求慢,需要等到最慢的请求完成了才会发送下一组。

image.png

如图中所示,如果每组中画红框这些时间也能利用起来,并发请求效率又将上升一个层级。

并发控制

我们能不能像控制一个执行队列一样,控制队列中执行数量也就是队列长度,每当有一条执行完成时出队,同时入队下一条,从而充分利用开启的每一条TCP链接。

我们将使用一个叫 p-limit 的库,源码行数不多,感兴趣的可以去看看,核心思路跟我们说的维护一个执行队列差不多。

安装


bash

复制代码

npm install p-limit

改造一下请求代码


js

复制代码

import PLimit from 'p-limit' // 限制五条并发 const pLimit = PLimit(5) const execList = [] const sent = async () => { for (let i = 0; i < 100; i++) { execList.push(pLimit(fetchData)) } await Promise.all(execList) }

跑来起验证效果~~~~

动画.gif

至此达到我们最终想要的效果,一个可控的并发请求,即能控制并发数也不会出现超长的 stalled 阻塞后续请求。

总结

1、高并发请求不做限制时,会导致后续请求阻塞,甚至浏览器卡顿或崩溃

2、串行逐条发送,并发请求慢,整体耗时太长

3、串行五条一组发送,还可以进一步提升,更高效的利用TCP链接空闲时间

4、并发控制,目前较好的处理方式

如果大家有更好的方式的话可以分享出来!

OV9734 DATASHEET,完整规格书 OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等 立即下载

相关推荐

jmeter小白下载安装步骤

本文仅仅简单介绍了jmeter工具的下载安装,以及基础的操作步骤。

昔年@曦的博客 3492

并 发 请 求

并发请求

小蜜蜂的博客 860

TOEIC托业词汇汇总(完整版)

1.appointment 约会,约定2.attendance 出席人数;出席3.cabinet 橱柜4.calendar 日历;月历;行事历5.clerk 办事员,书记6.directory 人名住址薄7.duplicte 复制;副本8.filing 归档9.in-tray 待处理文件盒10.monitor 检测;监视;追踪11.out-tray 已处理文件盒12.partition 分隔;分隔物(如墙壁等)13.postage 邮费。

weixin_39676449的博客 1万+

前端优化之高并发处理

大部分的高并发处理基本都是在后端处理,但是在部分特殊情况下,后端无法阻止用户行为,需要前端做配合。例如在抢购、秒杀等场景。 高并发是什么? 对此,我们首先需要简单的去了解一下,高并发是什么? 高并发是指在极短单位时间内,有很多用户同时的访问同一 API 接口或者 Url 地址,造成极多个请求同时发起到服务器。它经常会发生在有大活跃用户量,用户高聚集的业务场景中。 浏览器请求限制 浏览器在向后端...

肥晨开发的学习之路 6913

保姆级教程:用AdGuard DNS代理实现全设备广告过滤(含Win/Mac/安卓/iOS配置)

本文提供了一份详尽的AdGuard DNS代理配置指南,帮助用户在全设备(Win/Mac/安卓/iOS)上实现广告过滤。通过系统级DNS设置,AdGuard能有效拦截广告、跟踪器和恶意网站,提升隐私保护和浏览效率。教程涵盖原理说明、各平台配置步骤及高级优化技巧,适合不同技术水平的用户。

weixin_42656416的博客 819

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.youkuaiyun.com/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4518

高并发解决方法(通俗易懂)

采用HttpClient页面静态化技术对首页的信息进行缓存,将活动页面上的所有可以静态的元素全部静态化,并尽量减少动态元素。通过CDN来抗峰值。

m0_58823014的博客 2015

一文详细讲解CRM系统(附架构图、流程、功能介绍)

专为中小企业量身打造高性价比的数字化转型路径!企业如何用CRM才能真正做到降本增效?今天,就用一文讲清这些问题!读完本文,你将清楚得了解CRM的概念、框架、流程、功能、企业成功案例,文末还有常见问题解答。

Dabeishandong的博客 9925

【场景】高并发解决方案

CDN 它本身也是一个缓存,它把后端应用的数据缓存起来,用户要访问的时候,直接从CDN上获取,不需要走后端的 Nginx,以及具体应用服务器Tomcat,它的作用主要是加速数据的传输,也提高稳定性,如果从CDN上没有获取到数据,再走后端的Nginx 缓存,Nginx上也没有,则走后端的应用服务器,CDN主要缓存静态资源(js、css、html、png)第一次访问返回200,第二次刷新访问,返回响应码为304,表示页面内容没有修改过,浏览器缓存的内容还是最新的,不需要从服务器获取,直接读取浏览器缓存即可。

长期更新自学笔记 1107

【SAP报错】BK128&K5112

在ECC中使用CO1F进行Progressive confirmation时,依次遇到了如下的报错。

weixin_45228526的博客 783

【OpenClaw从入门到精通】第07篇:2026实测!零基础开发OpenClaw自定义Skill——招聘外呼自动邀约完整教程

本文聚焦OpenClaw自定义Skill开发全流程,针对现成技能无法满足个性化场景(如专属招聘流程、内部系统对接)的痛点,以“招聘外呼自动邀约”为实战案例,从概念认知、环境搭建、分步开发到测试优化,手把手教读者从零构建自定义Skill。内容涵盖Skill目录结构、SKILL.md核心配置、Python主逻辑实现、API对接、安全配置等关键环节,融入2026年ClawHavoc事件安全警示,强调最小权限、凭证安全等开发原则。所有代码经实测可运行,步骤详尽且兼顾新手友好与进阶需求。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1193

前端如何处理「并发」问题?

在项目中我们会遇到一次请求多个接口,当所有请求结束后进行操作,也会遇到多个请求(大量)同时进行请求资源,本文就并发问题通过axios对这两种现象进行优化处理,主要通过 axios中all、spread、请求拦截以及响应拦截进行处理。

编码世界 2005

PCL 建筑物点云立面和平面分割提取【2025最新版】

在建筑物点云中,立面点和平面点的法向量存在明显的差异,根据法向量在Z方向的分量设置相应得阈值即可实现立面点与平面点的分割。

点云侠的博客 1961

高并发场景下的 HttpClient 优化方案,QPS 大大提升!

来源:blog.youkuaiyun.com/u010285974/article/details/85696239伙伴做前后端分离项目,手摸手教学,后端 + 前端全栈开发,从 0 到 1 手敲,1v1 答疑,直到项目上线,后续上新更多项目,戳我加入HttpClient优化思路:池化长连接httpclient和httpget复用合理的配置参数(最大并发请求数,各种超时时间,重试次数)异步多读源码1.背景我们有...

犬小哈 161

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

项目自从用了接口请求合并,效率直接加倍!

最近,小哈在带小伙伴做前后端分离博客项目,手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,直到项目上线。目前专栏正在更新第七章,已更新了59小节,共计90409字, 演示截图:470张,持续更新中..后续还会上新更多项目,戳我加入请求合并到底有什么意义呢?我们来看下图。图片假设我们3个用户(用户id分别是1、2、3),现在他们都要查询自己的基本信息,请求到服务...

犬小哈 229

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

高并发下的计数器,为什么阿里不推荐使用 AtomicLong?

来源:blog.youkuaiyun.com/kologin/article/details/135126371???? 欢迎加入小哈的星球,你将获得:专属的项目实战 / Java 学习路线 /一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 1.0 版本完结啦,2.0 正在更新中...,演示链接:http://116.62.199.48/,全程手摸手,后端 + 前端全栈开发,从 0 到 1...

犬小哈 101

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

高德导航红绿灯为啥能读秒?

最近,小哈在带小伙伴做前后端分离博客项目,手摸手教学,后端 + 前端全栈开发,从 0 到 1 手敲,1v1 答疑,直到项目上线,后续还会上新更多项目,戳我加入来源:JavaEdge1 内部员工吐露2 真正的内幕免责声明~任何文章不要过度深思!万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」 ;不要急着评判文章列出的观点,只需代入其中,适度审视...

犬小哈 208

后端开发者从零做一个移动应用(后端篇)

后端开发全栈系列第二篇。如何搭建一个完整的后端系统

大愚Talk 8202

海量请求下的接口并发解决方案

来源:https://blog.youkuaiyun.com/weixin_44414492???? 欢迎加入小哈的星球,你将获得:专属的项目实战 / Java 学习路线 /一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦,演示链接:http://116.62.199.48/,新项目正在酝酿中。全程手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1...

犬小哈 198

SpringBoot + Disruptor 实现特快高并发处理,支撑每秒 600 万订单无压力!

来源|blog.youkuaiyun.com/buertianci/article/details/105327031???? 欢迎加入小哈的星球,你将获得:专属的项目实战/ Java 学习路线 / 一对一提问 / 学习打卡目前, 正在星球内部带小伙伴做第一个项目:前后端分离博客,手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,直到项目上线。目前已更新了108小节,累计15...

犬小哈 327

Spring MVC 与 Spring Webflux 性能测试,谁更强?

???? 欢迎加入小哈的星球,你将获得:专属的项目实战(图文+视频) / Java 学习路线 / 一对一提问 / 学习打卡目前, 正在星球内部带小伙伴做第一个项目:前后端分离博客,手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,直到项目上线。目前已更新了76小节,累计10w+字,讲解图:513张,还在持续爆肝中.. 后续还会上新更多项目,如秒杀系统, 在线商城,...

犬小哈 368

微服务Token鉴权设计的几种方案

来源:juejin.cn/post/7329352197837029385???? 欢迎加入小哈的星球,你将获得:专属的项目实战 / Java 学习路线 /一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 1.0 版本完结啦,2.0 正在更新中...,演示链接:http://116.62.199.48/,全程手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,...

犬小哈 260

SpringBoot-Starter 造轮子之自动锁组件

来源:juejin.cn/post/7229615985807982649???? 欢迎加入小哈的星球,你将获得:专属的项目实战 / Java 学习路线 /一对一提问 / 学习打卡/ 赠书福利全栈前后端分离博客项目 1.0 版本完结啦,2.0 正在更新中...,演示链接:http://116.62.199.48/,全程手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1...

犬小哈 133

京东开源,牛逼哄哄的 JD-hotkey 到底有多强悍?

来源:gitee.com/jd-platform-opensource/hotkey???? 欢迎加入小哈的星球,你将获得:专属的项目实战 / Java 学习路线 /一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 1.0 版本完结啦,2.0 正在更新中...,演示链接:http://116.62.199.48/,全程手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点...

犬小哈 171

你需要多少内存来运行100万个并发任务?

最近,小哈在带小伙伴做前后端分离博客项目,手摸手教学,后端 + 前端全栈开发,从 0 到 1 手敲,1v1 答疑,直到项目上线,后续还会上新更多项目,戳我加入[原文作者]:Piotr Kołaczkowski[原文地址]:点击阅读原文在这篇博客文章中,我深入比较了 Rust、Go、Java、C#、Python、Node.js 和 Elixir 等流行语言中异步和多线程编程的内存消耗。不久前,我不得...

犬小哈 152

中国程序员独立开发9年、最受欢迎的开源Redis客户端——被Redis公司收购了!...

???? 欢迎加入小哈的星球,你将获得:专属的项目实战 / Java 学习路线 /一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 1.0 版本完结啦,2.0 正在更新中...,演示链接:http://116.62.199.48/,全程手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,直到项目上线。目前已更新了219小节,累计35w+字,讲解图...

犬小哈 172
上一篇: Java如何处理多API请求
下一篇: 拼多多根据ID取商品详情 API 返回值说明
普通网友
博客等级 码龄4年 978粉丝 188原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值