前端需不需要控制并发请求?浏览器自带并发控制?

不知道为什么,最近大数据给我推荐了几篇前端做控制并发的文章,技术实现是没任何问题,使用到的技术核心也不错,就是应用的地方就有点问题了。

浏览器 HTTP 请求 pending

打开浏览器,network 可以看每个请求的状态,正常来说,pending 表示请求已经发起,等待后端响应。

而现代浏览器,当一个浏览器对同一域名的并发连接数达到限制时,额外的请求会被浏览器暂时搁置,这些请求还未发送到服务器。正常来说浏览器都是 6 个。当请求少于 6 个了才会继续发起下一个请求。所以有一个优化就是用不同域名进行请求,一般也就分开静态资源和接口不同域名。

所以那些应用在控制请求并发的文章,个人觉得没太大意义。如果核心是分享前端如何创建一个池子和释放,那就另说。

代码验证

node 启动一个测试接口

// server.jsconst http = require('http');
const url = require('url');const hostname = '127.0.0.1';
const port = 3000;const server = http.createServer((req, res) => {const parsedUrl = url.parse(req.url, true);const pathname = parsedUrl.pathname;const method = req.method;res.setHeader('Content-Type', 'application/json');res.setHeader('Access-Control-Allow-Origin', '*');if (method === 'GET' && pathname === '/') {res.statusCode = 200;console.log('Have connect: ' + parsedUrl.query.index);setTimeout(() => {res.end(JSON.stringify({ message: 'Hello World!' }));}, 6000)} else if (method === 'POST' && pathname === '/data') {let body = '';req.on('data', chunk => {body += chunk.toString();});req.on('end', () => {const data = JSON.parse(body);res.statusCode = 200;res.end(JSON.stringify({ message: `You sent: ${JSON.stringify(data)}` }));});} else {res.statusCode = 404;res.end(JSON.stringify({ message: 'Not Found' }));}
});server.listen(port, hostname, () => {console.log(`Server is running at http://${hostname}:${port}/`);
});

js 调用(数量可以随便定)

function getHello(index) {axios.get("http://127.0.0.1:3000?index=" + index).then((res) => {console.log(res);});
}for (let i = 0; i < 100; i++) {getHello(i);
}

看接口的输出,很容易就能看见,每隔 6 秒钟,接口才能接受到请求,而浏览器看 network 是 100 个请求同时发出,都是 pending 状态。

控制并发,池子创建和释放

那些文章想要的其实也很简单,就是把一系列的任务放到一个数组,运行到某个任务,就从池子里面释放,当同时存在 N 个任务的时候就等候,一个任务完成了继续从池子里面取任务。

  const concurrency = 6;let taskList = [];let activeCount = 0;const task = (index) => {const time = getRandomTime(1, 9);console.log(`task:${index}--${taskList.length}`);setTimeout(() => {activeCount--;taskOver();}, time);};const getRandomTime = (min, max) => {min = Math.ceil(min);max = Math.floor(max);const randomInt = Math.floor(Math.random() * (max - min + 1)) + min;return randomInt * 1000;};const taskOver = () => {if (taskList.length > 0 && activeCount < concurrency) {activeCount++;const taskItem = taskList.shift();taskItem.task(taskItem.index);}};for (let i = 0; i < 100; i++) {taskList.push({index: i,task: task,});}for (let i = 0; i < concurrency; i++) {taskOver();}

如果时间设置成固定值,控制台输出就很有规律,6 个一组。如果真的要用到控制并发,实际逻辑应该会更复杂,如果拿来控制请求的并发,还是算了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847256.shtml

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

相关文章

如何让 大模型/深度学习 更加聪明(切实有效的8个思考角度)

要让大模型更加聪明&#xff0c;可以采取以下方法&#xff1a; 增加数据量&#xff1a;大模型需要足够的数据来学习和理解复杂的问题。通过增加训练数据的数量&#xff0c;可以帮助模型更全面地学习和推理。 提高模型的复杂度&#xff1a;大模型往往有更多的层和参数&#xff…

「vue同一个组件,不同路由切换时界面没有更新问题」

问题&#xff1a;vue项目中不同路由切换时&#xff0c;因为引用的同一个组件&#xff0c;界面数据没有更新 一、解决方法 添加key&#xff0c;具体原理可参考vue中的diff算法 <router-view :key"$route.fullPath"></router-view>

【代码随想录算法训练营第37期 第二十八天 | LeetCode93.复原IP地址、78.子集、90.子集II】

代码随想录算法训练营第37期 第二十八天 | LeetCode93.复原IP地址、78.子集、90.子集II 一、93.复原IP地址 解题代码C&#xff1a; class Solution { private:vector<string> result;void backtracking(string& s, int startIndex, int pointNum){if(pointNum 3){…

AI大数据处理与分析实战--体育问卷分析

AI大数据处理与分析实战–体育问卷分析 前言&#xff1a;前一段时间接了一个需求&#xff0c;使用AI进行数据分析与处理&#xff0c;遂整理了一下大致过程和大致简要结果&#xff08;更详细就不方便放了&#xff09;。 文章目录 AI大数据处理与分析实战--体育问卷分析一、数据…

【电子通识】什么是电力电子

什么是电力电子 在日常生活中&#xff0c;电能变换的需求无处不在。比如给手机充电&#xff0c;充电器从插座220V交流电取电并转换为手机电池所需的5V或者其他幅度的直流电输送给手机&#xff0c;这就完成了最简单的AC-DC电能转换。除此之外&#xff0c;还有空调、电视、新能源…

【C++】入门(二):引用、内联、auto

书接上回&#xff1a;【C】入门&#xff08;一&#xff09;&#xff1a;命名空间、缺省参数、函数重载 文章目录 六、引用引用的概念引用的使用场景1. 引用做参数作用1&#xff1a;输出型参数作用2&#xff1a;对象比较大&#xff0c;减少拷贝&#xff0c;提高效率 2. 引用作为…

MySQL—约束—外键约束(基础)

一、引言 概念&#xff1a;外键用来让两张表的数据之间建立连接&#xff0c;从而保证数据的一致性和完整性。 举个例子&#xff1a; 提示说明&#xff1a;&#xff08;有两张表&#xff09; &#xff08;1&#xff09;员工表&#xff1a;emp id&#xff1a;主键、姓名、年龄、…

git 提交

当你不小心在master上改了代码&#xff0c;并且add&#xff0c; commit 之后&#xff0c;想push&#xff0c;发现根本push不了&#xff08;本来也不能直接将master代码push到远端&#xff09;&#xff0c;而且每次pull远程master的时候都要和本地的master进行merge &#xff0c…

机器人系统ros2-开发学习实践16-RViz 用户指南

RViz 是 ROS&#xff08;Robot Operating System&#xff09;中的一个强大的 3D 可视化工具&#xff0c;用于可视化机器人模型、传感器数据、路径规划等。以下是RViz用户指南&#xff0c;帮助你了解如何使用RViz来进行机器人开发和调试。 启动可视化工具 ros2 run rviz2 rviz2…

css-Ant-Menu 导航菜单更改为左侧列表行选中

1.Ant-Menu导航菜单 导航菜单是一个网站的灵魂&#xff0c;用户依赖导航在各个页面中进行跳转。一般分为顶部导航和侧边导航&#xff0c;顶部导航提供全局性的类目和功能&#xff0c;侧边导航提供多级结构来收纳和排列网站架构。 2.具体代码 html <!-- 左侧切换 --><…

15、matlab绘图汇总(图例、标题、坐标轴、线条格式、颜色和散点格式设置)

1、plot()函数默认格式画图 代码: x=0:0.1:20;%绘图默认格式 y=sin(x); plot(x,y) 2、X轴和Y轴显示范围/axis()函数 代码: x=0:0.1:20;%绘图默认格式 y=sin(x); plot(x,y) axis([0 21 -1.1 1.1])%设置范围 3、网格显示/grid on函数 代码: x=0:0.1:20;%绘图默认格式 …

CXL (1)

为什么有CXL CXL说到底 是为了打破内存墙而生的 CXL全称是Compute Express Link&#xff0c; 可以用来连接CPU&#xff0c;以及其他任何计算单元&#xff0c;比如GPU。 CXL和PCIe跑在一样的physical layer上&#xff0c;与PCIe不一样的是&#xff0c;CXL允许CPU和连接的设备共…

Python | R 潜在混合模型

&#x1f4dc;用例 &#x1f4dc;Python | MATLAB | R 心理认知数学图形模型推断 | &#x1f4dc;信用卡消费高斯混合模型 | &#x1f4dc;必修课学业成绩分布异常背景混合模型潜在类别分析 ✒️潜在混合模型 本质上&#xff0c;混合模型&#xff08;或混合分布&#xff09;…

(文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略

参考文献&#xff1a; [1]潘虹锦,高红均,杨艳红,等.基于主从博弈的售电商多元零售套餐设计与多级市场购电策略[J].中国电机工程学报,2022,42(13):4785-4800. 1.摘要 随着电力市场改革的发展&#xff0c;如何制定吸引用户选择的多类型零售套餐成为提升售电商利润的研究重点。为…

wms中对屏幕进行修改wm size设置屏幕宽高原理剖析

背景&#xff1a; 上面是正常屏幕1440x2960的屏幕大小&#xff0c;如果对display进行相关的修改&#xff0c;可以使用如下命令&#xff1a; adb shell wm size 1080x1920 得出如下的画面 明显看到差异就是屏幕上下有黑边了&#xff0c;那么下面就来调研这个wm size是怎么做的…

matlab中添加子文件夹路径以及结构体

添加子文件夹路径举例 addpath(./functions);结构体使用举例&#xff1a; 首先对结构体初始化&#xff0c;貌似matlab中不需要提前声明。 para para_init();function [para] para_init() %Construct a struct of the initial values for all the parameters % [values] …

(10)svelte 教程:Slots

&#xff08;10&#xff09;svelte 教程&#xff1a;Slots 什么是 Slots Slots 是 Svelte 框架中的一种特性&#xff0c;用于在组件中定义插槽&#xff0c;以便父组件可以向子组件传递任意的内容。这种机制使得组件更具灵活性和可复用性&#xff0c;因为你可以在组件内部插入…

水库大坝安全监测系统建设方案

一、背景 随着自动化技术的进步&#xff0c;大部分水库大坝不同程度地实现了安全监测自动化。但仍存在以下问题&#xff1a; 1、重建轻管&#xff0c;重视安全监测系统建设&#xff0c;不够重视运行维护。 2、缺乏系统性、综合性及相关性的资料分析功能。 3、软件大多为数据…

harbor 只读模式修改

The system is in read only mode. Any modification is prohibited。 使用harbor时&#xff0c;做了一个定时清理任务&#xff0c;可能是因为任务失败或者某种原因导致的&#xff0c;系统一直处于只读模式&#xff0c;以为是要看一些表结构&#xff0c;然后去修改参数&#xf…

2.2数据的表示和运算--原码、反码、补码、移码

2.数据的表示和运算 2.2原码、反码、补码、移码 &#x1f53a;问题&#xff1a;真值与对应的原码、反码、补码变换规则&#xff1f; 答&#xff1a; 正数&#xff1a;原码、反码、补码都一样。 负数&#xff1a;原码不变、反码除符号位其它各位取反、补码在反码基础上再加…