今天在对项目做性能分析时发现,js代码中同时发出的多个异步请求耗时很长,查看服务器处理 时间发现,每个请求的响应都在毫秒级,
但是页面请求的响应时间却在1秒左右,百思不得其解,后来仔细测试发现,这个并发的ajax请求虽然是同时进入的服 务器,但是各
自的处理时间却存在彼此等待的情况,每个请求的时间处理时间都为几毫秒,但是却在等待上一个请求的结束才开始处理, 
后来查资料发现以下tips:

xmlhttp存在最大并发数,ajax设计应有所斟酌

这次认真的测试了三种浏览器(ie/firefox/opera)的xmlhttp并发行为,发现如果用户同时发出很多xmlhttp 异步请求,那么浏览器不是一股脑全把请求发出去,而是存在一个最大并发数。我的机器测试发现,ie和ff里面是2,opera是4。

所以说,在设计一个站点时,让ajax页面同时载入数十个xmlhttp请求不是明智的做法。在考虑减少接口耦合的同时,也应该斟酌速度问题。实际上,可以使用某些细化的设计,可以把多种请求绑定到一起发送,从而达到优化的目的。

Ajax并发 
  Ajax是以异步的方式向服务器提交需求,这就会存在多个ajax请求同时提交,或者迭代提交的情况,这将导致资源竞争(racing),设计较好的 情况下,可以通过disable提交按钮的缓解此类问题,但一旦出现迭代提交request的情况,就可能出现XMLHttpRequest对象的引用被 覆盖,但具体会发生什么样的情况,取决于Ajax的编码。 
   Ajax在异步的情况下,并发数并非没有限制,Wininet 会限制每个服务器的连接数,限制它对单个 HTTP 服务器的同时连接的数量。
如果超过此限制时,请求将阻止,直到完成当前的连接之一。这是设计使然,是与 HTTP 规范和行业标准。例如IE8并发数就限制在2,Firefox 
21限制在6。当然IE的限制可以在注册表中修改,HKEY_LOCAL_MACHINE\SOFTWARE\  Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_MAXCONNECTIONSPERSERVER。   

ersion HTTP 1.0 server (broadband connection) HTTP 1.1 server (broadband connection) HTTP 1.0 server (dial-up 
connection)
HTTP 1.1 server (dial-up 
connection)
Internet Explorer 7 and earlier 4 2 4 2
Internet Explorer 8 6 6 4 2

  

  超出上述限制,超出的请求将会被浏览器阻塞,直到先前的请求已经完成才会启动。在这里建立使用队列来解决这些问题。基本思路,生成XHR对象之后,检 测当前并发数量是否大于最大请求的上限,若大于上限,则将XHR对象压入队列之中,否则就可以直接发送,并且可以继续增加并发请求数量。请求完成的时候, 进行响应处理,并在结束之时进行并发数量减一操作,接着就可以检测队列中是否有等待请求,若有等待请求,就发送给队首的XHR对象进行请求。

ajax大并发问题的更多相关文章

  1. 转载:把你的精力专注在java,jvm原理,spring原理,mysql锁,事务,多线程,大并发,分布式架构,微服务,以及相关的项目管理等等,这样你的核心竞争力才会越来越高

    https://developer.51cto.com/art/202001/608984.htm 把你的精力专注在java,jvm原理,spring原理,mysql锁,事务,多线程,大并发,分布式架 ...

  2. 处理大并发之五 使用libevent利器bufferevent

    转自:http://blog.csdn.net/feitianxuxue/article/details/9386843 处理大并发之五 使用libevent利器bufferevent 首先来翻译一段 ...

  3. ab测试大并发错误

    转载自http://xmarker.blog.163.com/blog/static/226484057201462263815783 apache 自带的ab工具测试,当并发量达到1000多的时候报 ...

  4. 大并发连接的oracle在Linux下内存不足的问题的分析

    大并发连接的oracle在Linux下内存不足的问题的分析 2010-01-28 20:06:21 分类: Oracle 最近一台装有Rhel5.3的40G内存的机器上有一个oracle数据库,数据库 ...

  5. ajax大数据排队导出+进度条

    描述 :我们现在有很多数据,分表存放,现在需要有精度条的导出.最后面有完整源码. 效果图:

  6. 大并发大数量中的MYSQL瓶颈与NOSQL介绍

    NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面.今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于N ...

  7. 我是如何处理大并发量订单处理的 KafKa部署总结

    今天要介绍的是消息中间件KafKa,应该说是一个很牛的中间件吧,背靠Apache 与很多有名的中间件搭配起来用效果更好哦 ,为什么不用RabbitMQ,因为公司需要它. 网上已经有很多怎么用和用到哪的 ...

  8. 论 大并发 下的 乐观锁定 Redis锁定 和 新时代事务

    在 <企业应用架构模式> 中 提到了 乐观锁定, 用 时间戳 来 判定 交易 是否有效, 避免 传统事务 的 表锁定 造成 的 瓶颈 . 在 现在的 大并发 的 大环境下, 传统事务 及其 ...

  9. 大并发server架构 &amp;&amp; 大型站点架构演变

    server的三条要求: 高性能:对于大量请求,及时高速的响应 高可用:7*24 不间断,出现问题自己主动转移.这叫fail over(故障转移) 伸缩性:使用跨机器的通信(TCP) 另外不论什么网络 ...

随机推荐

  1. Django-website 程序案例系列-15 singnal分析

    在django框架中singnal的应用相当于在你执行某些重要函数语句时在这条语句的前后放置两个预留的钩子,这两个钩子就是singnal,这个钩子也可以理解成两个触发器,当出现执行语句前后是触发执行某 ...

  2. BZOJ3159决战——树链剖分+非旋转treap(平衡树动态维护dfs序)

    题目描述 输入 第一行有三个整数N.M和R,分别表示树的节点数.指令和询问总数,以及X国的据点. 接下来N-1行,每行两个整数X和Y,表示Katharon国的一条道路. 接下来M行,每行描述一个指令或 ...

  3. BZOJ2793[Poi2012]Vouchers——枚举

    题目描述 考虑正整数集合,现在有n组人依次来取数,假设第i组来了x人,他们每个取的数一定是x的倍数,并且是还剩下的最小的x个.正整数中有m个数被标成了幸运数,问有哪些人取到了幸运数. 输入 第一行一个 ...

  4. Luogu4221 WC2018州区划分(状压dp+FWT)

    合法条件为所有划分出的子图均不存在欧拉回路或不连通,也即至少存在一个度数为奇数的点或不连通.显然可以对每个点集预处理是否合法,然后就不用管这个奇怪的条件了. 考虑状压dp.设f[S]为S集合所有划分方 ...

  5. A1029. Median

    Given an increasing sequence S of N integers, the median is the number at the middle position. For e ...

  6. [luogu4462][异或序列]

    传送门 突然发现自己没整理过异或的知识,正好借这个题整理一下. 关于异或 (1)异或就是在二进制下,两数各个位置上的数,相同为0,不同为1,所得到的数,比如说4^7,4的二进制是100,7的二进制是1 ...

  7. linux command ------ find

    find | grep luoluo 将当前目录及子目录的文件名中含有luoluo的文件过滤出来 | 是管道,把find查找的内容传递给下个命令(grep) find后面不加其他内容(比如路径)表示打 ...

  8. memcache、redis原理对比

    一.问题:     数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求.   二.解决方案:      1.通过高速服务器Cache缓存数据库数据      2.内存数据库     ( ...

  9. Python/spss-多元回归建模-共线性诊断1(推荐A)

    欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction ...

  10. php脚本#!/usr/bin/env php 写法

    脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它. 比如php脚本的第一行可以写成如下几种格式 #!/usr/bin/php #!/usr/bin/env php # ...