• 页面出现假死的问题


    下面谈论的是Chrome浏览器。

    很早以前,我就遇到过页面假死的现象。具体表现是:在标签页上一直转圈,页面不能打开。使用当前浏览器重新访问同一域名,会出现同样的现象。

    最近我在工作中再次遇到这个问题。

    出现的原因是一个页面同时发起了大量ajax请求。(例如都是向xxx.com域名发出请求)。每一个请求都会花较长时间。

    此时新开页面访问xxx.com就会出现卡死现象,并且在页面左下角会出现“正在等待可用的套接字”。

    这时候进入chrome 内部调试工具 chrome://net-internals/#sockets,可以看到transport_socket_pool列表的name(对于请求的域名,包括端口)字段。可以看到xxx.com:80行对应的active列为6,然后pending列包含剩下的待处理的请求数。并且可以看到Top Priority列的优先级。此时我们可以看到为HIGHEST。(我经过试验发现,在包含大量待处理请求的时候,此时再打开一个页面访问同一域名,就会使该字段的优先级提升)。

    chrome 内部的机制是在对同一域名的连接socket上限是6,我们可以在chrome://net-internals/#sockets中看到。

    如果此时再有向该域名发出请求,在dev-tools(开发者工具)的network项看到请求详情出现“Provisional headers are shown”字样(此时,浏览器是还未发出该请求的)。导致其他正常的业务请求(需要快速返回数据)不能发出,导致用户的困扰。

    我的解决办法是对于开始的大量ajax请求(这些请求都是不需要立即返回数据的请求),改变请求域名(a.xxx.com),也就是不同域名指向同一服务器。类似于Hash Dmain的做法。

    这样一来也只会阻塞向a.xxx.com:80的请求。

    Ps:chrome://net-internals 包含了大量的调试信息,有兴趣的同学可以多去研究一下,并分享。(估计大多只能到国外去查找资料了)

          对于上面所说的同一域名,我想应该是域名+端口号,从transport_socket_pool表name字段看起来是这样的,不知道会不会考虑协议。具体的还未验证。

    Praise the sun.
  • 相关阅读:
    适用于Bash编程初学者小例子
    Linux下的压缩与解压命令速查
    Linux下拷贝一个带有soft link的dir,会把被link的内容也拷贝过来吗?
    适用于Bash编程初学者小例子
    从一个git仓库迁移代码到另一个git仓库(亲测有效版)(转)
    海量数据面试题(附题解+方法总结)(转)
    leetcode刷题(六)路径总和I、II、III(转)
    浅谈AVL树,红黑树,B树,B+树原理及应用(转)
    [LeetCode] 860. Lemonade Change 买柠檬找零(转)
    [leetcode] 134. Gas Station 解题报告(转)
  • 原文地址:https://www.cnblogs.com/xzysaber/p/5264364.html
Copyright © 2020-2023  润新知