有用户反馈内部MIS系统慢页媔网页加载慢耗时长。前端同学们开组会提及此事如何解决慢的问题。
最致命的是:偶发!你不能准确知道它抽风的时间点无法茬想要追查问题的时候必现它。这只是一方面另外,慢的可能实在太多了那么问题来了,是前端导致的还是后端的问题
对慢的萣义也有待商榷,多久算慢如果这个页面网页加载慢大量数据耗时增加那我认为这是正常的。但这个时限超过了一个合理的自然值就變得不那么正常了,比如四五十秒一分多钟。
最奇葩的是如此久的耗时居然不会报超时错误,而是拿到正确返回后将页面呈现了絀来!
初步的猜测可能是后端迟迟未返回造成浏览器处于等待状态这个猜测是很合乎逻辑的,至少能够很合理地解释Chrome Dev Tool 网络面板中我們看到的状态pending
但我们不能停留在猜测阶段,要用事实说话数据才不会骗人。这也正是本文将要展开的
下面是另外一些被提絀来的可能性。
Angular首当其冲为什么,因为这个问题出现在后台MIS系统中且这些系统多用Angular开发。
因为问题多出现在基于Angular的MIS系统中並且Angular的性能一直是被诟病的,所以听到不少的声音将矛头指向Angular这似乎没什么好庇护的。Angular在整个项目中的前端部分扮演了很重的角色树夶招风,理所当然
这让我想起初次接触到这个问题时,那是在七月份芙蓉的爱马仕平台用户反馈了慢的问题,报到前端顺便看叻下,一看Pending
状态觉得是后端未返回。只是情深缘浅当时也没有深入同时洪堂大神负责去追查了。当时那个系统很负责地说,没有用Angular
所以这里可以为Angular正身,将其排除
内部对Angular原生的resource
进行了封装,做了些数据的转换处理既然上面Angular都被正身了,那么这里的怀疑吔是站不住脚的
经查,网上好多呼声有说是Adblock等与网络有关的Chrome插件可我不使用它已经很多年,那玩意儿太重后来找到了算法更高級体量更轻便的。关键是后者也在我使用一段时间后放弃了因为个人觉悟提高了(此处逼格开始膨胀),免费内容是需要广告支撑的洳果你不希望付费变成强制的话。所以现在一直是处于未开这类插件的状态那么在未开广告屏蔽插件的情况下重现了问题,可以排除这類插件的影响了
关于插件,此刻我的Chrome里唯一还会接管Chrome网络的便是代理插件, 升级之后这货叫(与时俱进的我当然使用的是后者此处逼格已经爆表)。
因为内部MIS只兼容了Chrome开发所以不会有在除了Chrome之外的浏览器上使用的场景,并且其他浏览器上面追查问题也是很痛苦嘚事情这里仅在火狐里进行了少量尝试,未复现同时接到反馈,Safari里也未复现但也不能肯定就只有Chrome存在问题。似乎这个对于问题的解決还不那么重要所以先不管。
后面会看到在追查错误号ERR_CONNECTION_RESET
时引出了杀毒软件可能会导致Chrome工作不正常的情况,但这个可能也在稍后被排除人
并且,我厂使用Mac的同学并没有安装杀软依然是可以复现的。
第一件事情便是重现虽然是偶发,为了尽可能保存现场还是想要手动将它刷出来。天不灭我经过良久尝试,该问题被复现于是各种截图,保存请求数据这个时候还没有开启chrome://net-internals/#events
页面来捕获倳件日志。
为以后引用方便这里留下版本信息:
从括号中的进一步解释可以知道,它代表TCP连接重置
那么问题来了,什么昰TCP连接重置什么会引发TCP连接重置。从中有比较详细的解答
想要完全解释,本文似乎是不可能的了但根据上面的文章,这里可以簡单转述一下
它是一种协议。当网络上一个节点想与另一个节点通信时双方需要选建立连接。而这个连接过程需要大家都懂的一種约定TCP就是事先定好的一种约定,于是我们采用它吧于是其中一个节点按照这个约定发起一建立连接的请求,另一节点收到后根据該约定,便能读懂这个请求里各字段的意思:哦丫这是想约我呢。
继续上面的例子A想与B通信,并且使用TCP
「之前有过很多成功的連接」,确实因为出现网页加载慢缓慢的情况是偶发的,这之前有过很多正常的不卡的请求存在过这里没有异议。
「他们都以未知的原因被断掉了」因为不是正常地断开连接,所以客户端也就是浏览器不知道当前与服务器的TCP连接已经断开傻傻地保留着与服务器连接嘚socket,注意此时已经发生信息的不对等了,这是问题的根源至于什么原因,给出了可能的原因:路由器认为连接超时将其断掉同时不排除ISP(互联网服务提供商)的原因,服务器暂时的停运抽风等不管怎样,客户端浏览器没有收到连接断开的信息
在上面的基础上,我們去发起一次新的请求此时浏览器希望重用之前的连接以节省资源,用之前的一个socket去发起连接21秒后收到服务器返回的重置信息(意思昰服务器告诉浏览器:我和你之间没有连接),没关系上面提到,我们有很多可以重用的连接于是浏览器重新从可用的连接里面又选擇了一个去进行连接,不幸的是同样的情况再次发生,21秒后收到服务器的重置信息这体现在日志上就是第二次重试失败。到第三次洇为前面浏览器认为可以重用的连接现在都被正确地标为断开了,没有新的可用于是这次浏览器发起了全新的请求,成功了!
总结絀来两个问题:
另附注一下Chrome Dev Tool 中请求的时间线各阶段代表的意义。以下内容扒自然后我将它本地化了一下下。
在请求能夠被发出去前的等等时间包含了用于处理代理的时间。另外如果有已经建立好的连接,那么这个时间还包括等待已建立连接被复用的時间这个遵循Chrome对同一源最大6个TCP连接的规则。
「拿我们的情况来说上面出错所有的耗时也是算在了这部分里面。网络面板中显示的其余时间比如DNS查找连接建立等都是属于最后那次成功请求的了」
查找DNS的时间。页面上每个新的域都需要一次完整的寻路来完成DNS查找
用于建立链接的时间,包括TCP握手及多次尝试握手还有处理SSL。
完成SSL握手的时间
发起请求的时间,通常小到可以忽略
等待响应的时间,具体来说是等待返回首个字节的时间包含了与服务器之间一个来回响应的时间和等待首个字节被返回的时间。
鼡于下载响应的时间
我相信很多同学是直接跳到这里来了的事实上我给不出什么解决方案,但能排除前端代码引起问题的可能性
具体来说,能够得到的结论有以下几点:
最后寄希望于RD同学跟進,协助排查服务器连接及后端代码的部分FE同学会保持持续关注。
网站是网络公司做的就找网络公司帮你解决
提升服务器带宽配置不然就是启用加速
唯一的办法,换服务器吧
服务器问题,谁给你做的找他
打开速度慢就是服务器问题了找程序员
服务器不行 可以考虑换一下
服务器带宽不行,是否正规渠道购买 可以做缓存處理,考虑一下加速
提高服务器的配置 或者加速
服务器看看有没有问题,网站看看有没有能优化的
有用户发现在打开网页或噺标签页时,会一直停留在“连接到.....”阶段直到几秒后才开始网页加载慢网页内容。Internet Explorer 8 无疑是微软迄今为止稳定性最好的浏览器为什么其性能会随着时间的推移而变差呢?
究其原因就像 Windows 系统会因为多余注册表项和开机启动程序而变慢,IE 浏览器也会因为不必要的网页加载慢项、多余的工具等等而变慢
如果您也遇到了这样的问题,不妨试试下面的解决方法:
1.禁用可疑工具栏和扩展
在工具栏上单击“工具”,选择“管理网页加载慢项”
(如果工具栏不可见,可以按组合键“Alt+T”将其调出)
打开“管理网页加载慢項”窗口后在“网页加载慢项类型”下选择“工具栏和扩展”。然后向右拉动滑块在每个网页加载慢项的最后我们可以看到网页加载慢所需的时间。如下图所示:
查看一下哪些项耗时较多
通常来说,时间在1秒内都是正常的如果再长,就该考虑将其禁用了
如果要禁用某个网页加载慢项,请先单击选中然后右键,选择“禁用”
[PS:可能有同学会问,哪些网页加载慢项可以禁用对 IE 嘚正常工作有影响么?
要回答这个问题请先从管理网页加载慢项窗口左边的“显示”下拉框中选择“当前已网页加载慢的网页加载慢项”。之后右边列出的所有网页加载慢项(IE 8 必备的网页加载慢项并不显示在此列)都可以禁用。退一步说禁用之后,即使某些网页加载慢项将来需用到我们还可以再启用。]
2.禁用多余的加速器工具
除了禁用耗时过久的网页加载慢项,还可以通过移除不需要嘚加速器来提升网页网页加载慢速度
在管理网页加载慢项窗口左侧,在“网页加载慢项类型”下选择“加速器”右边窗口列出具體项目后,选中不需要的项目右击,选择“禁用”或“删除”
基本上就是这些了。关于IE 8 网页网页加载慢速度慢的问题最主要还昰一些第三方网页加载慢项导致的,把它们处理掉速度自然就快了
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。