浏览器并发请求个数

探知 浏览器并发请求个数

  起因:在工作中经常会发现浏览器请求过多,会很慢很卡,但我并不知道并发请求个数,

          于是就写个例子,探知浏览器并发请求的个数。

  思路:1.新建网站。

          2.添加两个按钮,分别添加点击事件,请求不同接口。

          3.服务端添加内容,打印当前时间的日志,并使进程sleep 10秒。

          4.分别点击按钮,查看日志时间连续记录有几条,即为并发请求个数,间隔时间长的打印,即为下次排队执行的请求。

 html部分:

  添加两个

<body>
    <input id="Button1" type="button" value="button" onclick="f_click()" />
    <input id="Button2" type="button" value="button" onclick="f_click2()" />
</body>

Javascript部分:

复制代码
<script type="text/javascript">
    //第一个请求方法
    function f_click()
    {
        $.ajax({
            type: 'post',
            url: 'Handler.ashx',
            success: function (result) {
                alert('1');
            }
        });
    }
    //第二个按钮请求方法
    function f_click2() {
        $.ajax({
            type: 'post',
            url: 'Handler2.ashx',
            success: function (result) {
                alert('2');
            }
        });
    }
</script>
复制代码

 服务端代码:

复制代码
public class Handler : IHttpHandler 
{
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    public void ProcessRequest (HttpContext context)
    {
        
        context.Response.ContentType = "text/plain";
        log.Debug("接口1   " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
        System.Threading.Thread.Sleep(10000);
    }
    public bool IsReusable {
        get {
            return false;
        }
    }
}
复制代码

测试步骤:

同一浏览器下:

1.在同一域名下,同一页面,点击两个按钮,调用不同接口,查看日志。

2.在同一域名,不同页面,调用同一接口,查看日志。

3.在不同域名,分别调用不同接口,

(本次试验chrome4 )

发现,每6个请求打印的时间是连续的。同理举例,控制变量,测试浏览器并发请求个数。

结论:

浏览器的并发请求数目限制是针对同一域名的(例如向www.baidu.com发送请求)。即一时间针对同一域名下的请求有一定数量限制。超过限制数目的请求会被阻塞。


转载于:http://www.cnblogs.com/SweetMemory/p/6340919.html

在知乎上关于:浏览器允许的并发请求资源数是什么意思?

IE 6\7\8\9 以及chrome ,firefox 这些浏览器,允许的并发请求资源数是什么情况?以前觉得好像IE 6是2个并发,求助知乎,想得到更详细更正确的答案。这样有助于理解前端性能上的一些问题。

答案可以起到扩散思维的作用

答案如下:

这个问题实际上涉及非常多的考虑和因此而发生的优化技术:
首先,是基于端口数量和线程切换开销的考虑,浏览器不可能无限量的并发请求,因此衍生出来了并发限制和HTTP/1.1的Keep alive。 所以,IE6/7在HTTP/1.1下的并发才2,但HTTP/1.0却是4。 而随着技术的发展,负载均衡和各类NoSQL的大量应用,基本已经足以应对C10K的问题。 但却并不是每个网站都懂得利用domain hash也就是多域名来加速访问。因此,新的浏览器加大了并发数的限制,但却仍控制在8以内。
后端的保护

已经说得很全面了,补充一小点就是浏览器即使放弃保护自己,将所有请求一起发给服务器,也很可能会引发服务器的并发阈值控制而被BAN,而另外一个控制在8以内的原因也是keep alive技术的存在使得浏览器复用现有连接和服务器通信比创建新连接的性能要更好一些。

所以,浏览器的并发数其实并不仅仅只是良知的要求,而是双方都需要保护自己的默契,并在可靠的情况下提供更好的性能。

稍微跑跑题据说有益身心健康。
=================== 我是健康的分割线 ========================
前端技术的逐渐成熟,还衍生了domain hash, cookie free, css sprites, js/css combine, max expires time, loading images on demand等等技术。这些技术的出现和大量使用都和并发资源数有关。

  1. 按照普通设计,当网站cookie信息有1 KB、网站首页共150个资源时,用户在请求过程中需要发送150 KB的cookie信息,在512 Kbps的常见上行带宽下,需要长达3秒左右才能全部发送完毕。 尽管这个过程可以和页面下载不同资源的时间并发,但毕竟对速度造成了影响。 而且这些信息在js/css/images/flash等静态资源上,几乎是没有任何必要的。 解决方案是启用和主站不同的域名来放置静态资源,也就是cookie free。
  2. 将css放置在页面最上方应该是很自然的习惯,但第一个css内引入的图片下载是有可能堵塞后续的其他js的下载的。而在目前普遍过百的整页请求数的前提下,浏览器提供的仅仅数个并发,对于进行了良好优化甚至是前面有CDN的系统而言,是极大的性能瓶颈。 这也就衍生了domain hash技术来使用多个域名加大并发量(因为浏览器是基于domain的并发控制,而不是page),不过过多的散布会导致DNS解析上付出额外的代价,所以一般也是控制在2-4之间。 这里常见的一个性能小坑是没有机制去确保URL的哈希一致性(即同一个静态资源应该被哈希到同一个域名下),而导致资源被多次下载。
  3. 再怎么提速,页面上过百的总资源数也仍然是很可观的,如果能将其中一些很多页面都用到的元素如常用元素如按钮、导航、Tab等的背景图,指示图标等等合并为一张大图,并利用css background的定位来使多个样式引用同一张图片,那也就可以大大的减少总请求数了,这就是css sprites的由来。
  4. 全站的js/css原本并不多,其合并技术的产生却是有着和图片不同的考虑。 由于cs/js通常可能对dom布局甚至是内容造成影响,在浏览器解析上,不连贯的载入是会造成多次重新渲染的。因此,在网站变大需要保持模块化来提高可维护性的前提下,js/css combine也就自然衍生了,同时也是minify、compress等对内容进行多余空格、空行、注释的整理和压缩的技术出现的原因。
  5. 随着cookie free和domain hash的引入,网站整体的打开速度将会大大的上一个台阶。 这时我们通常看到的问题是大量的请求由于全站公有header/footer/nav等关系,其对应文件早已在本地缓存里存在了,但为了确保这个内容没有发生修改,浏览器还是需要请求一次服务器,拿到一个304 Not Modified才能放心。 一些比较大型的网站在建立了比较规范的发布制度后,会将大部分静态资源的有效期设置为最长,也就是Cache-Control max-age为10年。 这样设置后,浏览器就再也不会在有缓存的前提下去确认文件是否有修改了。 超长的有效期可以让用户在访问曾访问过的网站或网页时,获得最佳的体验。 带来的复杂性则体现在每次对静态资源进行更新时,必须发布为不同的URL来确保用户重新加载变动的资源。
  6. 即使是这样做完,仍然还存在着一个很大的优化空间,那就是很多页面浏览量很大,但其实用户直接很大比例直接就跳走了,第一屏以下的内容用户根本就不感兴趣。 对于超大流量的网站如淘宝、新浪等,这个问题尤其重要。 这个时候一般是通过将图片的src标签设置为一个loading或空白的样式,在用户翻页将图片放入可见区或即将放入可见区时再去载入。 不过这个优化其实和并发资源数的关系就比较小了,只是对一些散布不合理,或第一页底部的资源会有一定的帮助。 主要意图还是降低带宽费用。
总的来说,各类技术都是为了能让用户更快的看到页面进行下一步操作,但却不必将宝贵的资源浪费在没有必要的重复请求、不看的内容上。

转载于知乎:https://www.zhihu.com/question/20474326/answer/15696641,感谢答主的答复!


  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于100个高并发请求的优化,可以使用并发技术,如线程池或异步编程,以提高性能和效率。下面是一个使用Node.js中的`async/await`和`Promise.all`实现的示例代码: ```javascript // 使用axios库进行请求 const axios = require('axios'); // 请求 async function fetchData(url) { try { const response = await axios.get(url); return response.data; } catch (error) { console.error(error); return null; } } // 并发请求优化函 async function fetchParallel() { const urls = [ // 这里填写你需要请求的URL列表 'https://example.com/api/1', 'https://example.com/api/2', // ... 'https://example.com/api/100', ]; // 使用Promise.all并发执行所有请求 const responses = await Promise.all(urls.map(url => fetchData(url))); console.log(responses); // 输出所有请求的响应据 } fetchParallel(); ``` 在上述代码中,首先导入了`axios`库用于发送HTTP请求。然后定义了一个名为`fetchData`的异步函,该函使用`axios.get`发送GET请求,并返回响应据。 接下来,定义了一个名为`fetchParallel`的异步函。在该函中,定义了需要请求的URL列表,并使用`Promise.all`和`Array.map`实现了并发执行所有请求的优化。`Promise.all`等待所有请求完成,并将所有响应据作为组返回。 最后,将所有请求的响应据输出到控制台。 这是一个简单的高并发请求优化示例,你可以根据实际情况进行修改和扩展。请注意,这里的示例代码是在Node.js环境中运行的,如果你需要在浏览器端运行,请使用适当的方法和工具(如`fetch`或`XMLHttpRequest`)进行请求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值