前提提要
系统内存在两个服务器的接口,一个是己方,一个是他方,某一天很多客户反应页面加载缓慢,但是最终会显示,经过排查,发现他方的接口一直处于pending状态,导致我方接口被迫挂起。
奇葩的是,超时不会报错!!!
登录对方的官网,发现也进不去。。。初步猜测是对方的服务器挂了,但是这种情况会返回相应的报错,然后猜测是对方的后端一直未返回数据。

排雷
网上说的几种情况:
1.并发量问题:浏览器对同一域名存在一个最大并发连接数,建议将资源分布在多台主机上(我们虽然调用了两个接口,但是不同域名,排除);
2.系统兼容或杀毒软件导致(win7系统其他客户也在使用,并且对方没有安装杀毒软件,排除);

结果
在整个排错的过程中,我一直奇怪一个点,为什么第二个请求被阻塞了呢?也怀疑是不是Electron的原因,然后开始百度,在文章 Electron的主进程阻塞导致UI卡顿的问题 中,看到这样一段话:

在chromium中,页面渲染时,UI进程需要和main process不断的进行sync IPC,若此时main process忙,则UI process就会在IPC时阻塞。

永远不要让主进程busy,怎么做?
马上能够想到:为了不让主进程busy,必须让有工作量的任务变成异步的,例如:
请求网页时,不用sync-request而是用异步的request。
读取文件时,不用fs.readFileSync(‘input.txt’),而是fs.readFile(‘input.txt’, function (err, data) {}

看到第二段,瞬间有种醍醐灌顶的感觉,我去确认了一下代码并看到ajax中有这样一句:async:false !!!(由于代码已经转手过N次,到我手里的时候可读性实在有点差,于是我只大体浏览了一遍,并完美的忽视了这句话)

讲解
async为true时是异步,为false时是同步,而JavaScript的事件循环是遇到同步任务放入主线程,直接执行,遇到异步任务则是放进任务队列,主线程的任务执行完成后,再读取任务队列的任务。所以当async:false是,这是一个同步任务,而这个同步任务一直没有返回值,导致阻塞

新增知识点
1.了解到有一个chrome有一个工具:chrome://net-internals,用于帮助诊断网络请求与访问方面的问题;
2.单词:pending 代办;Stalled 停滞不前;
3.Ajax并发

Wininet 会限制每个服务器的连接数,限制它对单个 HTTP 服务器的同时连接的数量。如果超过此限制时,请求将阻止,直到完成当前的连接之一

4.执行中的线程:除了主线程之外,还有一个叫工作线程

主线程:也就是 js 引擎执行的线程,这个线程只有一个,页面渲染、函数处理都在这个主线程上执行。
工作线程:也称幕后线程,这个线程可能存在于浏览器或js引擎内,与主线程是分开的,处理文件读取、网络请求等异步事件。

更全面一点的话

JavaScript 单线程指的是浏览器中负责解释和执行 JavaScript 代码的只有一个线程,即为JS引擎线程,但是浏览器的渲染进程是提供多个线程的,如下:

  • JS引擎线程:用于解析JavaScript代码
  • 事件触发线程(onclick,onchange,…)
  • 定时触发器线程(setTimeout, setInterval)
  • 异步http请求线程:负责数据请求
  • GUI渲染线程(它与javaScript线程是互斥的)
  • EventLoop轮询处理线程:事件被触发时该线程会把事件添加到待处理队列的队尾

新增疑问

  • ajax是宏任务吗?
    答:是的

请求被挂起导致页面加载缓慢相关推荐

  1. 自定义字体包过大,导致页面加载缓慢的问题解决

    // 字体包过大,在渲染页面客户端时加载缓慢,导致页面加载缓慢影响用户体验.需要处理字体包: // 1. 转码,使得不受不同浏览器之间的限制 2.压缩:使得加载更迅速 // 使用中文字体压缩器:fon ...

  2. 关于请求被挂起页面加载缓慢问题的追查(stalled 时间过长)

    关于请求被挂起页面加载缓慢问题的追查 缘起 有一个Dashboard的页面大约有十几个图表,每一个图表是一个ajax请求. 突然有一天改了页面中间几个图表的查询逻辑,导致ajax请求响应时间比较长. ...

  3. 前端页面加载缓慢的原因和性能优化问题

    前端页面加载缓慢的原因和性能优化问题 一.页面加载缓慢的原因 二.前端性能优化方法 一.页面加载缓慢的原因 当我们打开一个网页,页面加载比较缓慢时,可能原因有以下几点: (1)过多的http请求 (2 ...

  4. 关于请求被挂起页面加载缓慢问题的追查

    本文前戏较多,务实的同学可以直接跳到结论. 由「钢的琴」网友脑洞大开延伸出了吉的他二的胡琵的琶,以及后来许嵩的「苏格拉没有底」,是否可以再拓展一下,得到哥本不爱吃哈根,哈根爱达斯等剧情乱入的关系. 上 ...

  5. 图片太大,导致页面加载过慢的处理方法

    整合博客:https://blog.csdn.net/wsyzxss/article/details/73480436  与 http://yujiangshui.com/three-html5-fe ...

  6. html5 页面加载缓慢,html5体验优化页面加载的14条建议

    html5体验优化页面加载的14条建议 1. fake 页 - 首屏加速 目标:首屏 3s 以内 因为 71% 的用户期望移动页面跟 pc 页面一样快 (3s) ,74% 的用户能容忍的响应时间为 5 ...

  7. ant design pro 加载慢_ant design pro项目打包后页面加载缓慢

    用ant design pro框架做的项目,打包之后每一个页面加载的速度都特别慢,在.webpackrc里面配置了ignoreMomentLocale: true, disableDynamicImp ...

  8. 更换域名导致 typecho 加载缓慢

    背景 我打算将自己的博客发布到公网上,项目部署在本人的 NAS 上,因为 NAS 的出口是家庭电信宽带(已申请公网 IP ).但是,电信考虑到安全和政治因素,就没有开放 443 和 80 端口.之前, ...

  9. Python selenium页面加载缓慢,超时解决办法

    最近在编写selenium自动化测试框架,遇到一个烦人的问题, driver.get()不执行完,浏览器页面一直在转圈圈,下面的代码根本就不会执行,耗时一天的时间终于解决了. 原理:driver.ge ...

最新文章

  1. AndroidStudio导入项目一直卡在Building gradle project info最快速解决方案
  2. 解决tomcat启动后访问页面中文乱码
  3. 用python画漂亮图片-python结合G2绘制精美图形
  4. WCF分发简述-ChannelDispatcher,EndpointDispatcher,MessageFilter
  5. mysql 查询条件优先级_mysql条件查询and or使用实例及优先级介绍
  6. php表单写入数据库,php表单写入数据库
  7. 『设计模式』JAVA I/O 与装饰者模式UML图
  8. 2016年工作总结和计划
  9. 华中科技大学文华学院 CSDN 高校俱乐部成立啦!
  10. KVM虚拟机openVSwitch杂记(2)
  11. 解决web网站被挂马清除方法
  12. uwsgi基础——参数
  13. julia安装源_Julia 国内镜像安装实测
  14. xh2.54母头转换为杜邦线母头
  15. FLASH三维照片墙组件(源文件)
  16. 无法打开internet站点ie6,7
  17. 2018年计算机考证时间
  18. 为什么说每个软件工程师,都该懂大数据技术?
  19. MIT Mini Cheetah仿真环境搭建(VMware中的ubuntu20.04,含问题解决)
  20. Permissions 0777 for xxx are too open

热门文章

  1. PPT制造精巧水晶收获组织机构图好看的ppt模板下载
  2. NXP(Freescale) QorIQ T2080 SRIO FRA程序分析
  3. Vegas Pro 15中文版
  4. 如何用 Vue + Vuetify 快速建站?
  5. 7.2.1因特网的链路层与网络层 - 因特网的链路层与网络层
  6. 生物信息数据格式:vcf格式
  7. pelco d协议测试软件,pelco-d协议.pdf
  8. 【软件安装-UBUNTU】【OLD】手把手教你在Linux上运行IE浏览器
  9. 口语机器翻译(ST)相关算法、论文、数据集、代码库等资源分享
  10. 2019中国电子商务产业园区经济发展论坛暨第四届国家电子商务示范基地联盟峰会在深圳召开...