0
点赞
收藏
分享

微信扫一扫

接口经常queued 2min 怎么解?

背景描述

最近版本上线了一些新功能。隔天测试也立即反馈了一个新问题。就是当操作3000条的大数据列表后,第一个被调用的接口就会queued 2min之久。

问题分析

看到接口返回过慢,最开始并未怀疑是前端问题,而是第一转给后端协助排查。但是当仔细查看devtools下network面板发现queued竟然就要两分钟。

这一下就发现问题并不好排查,因为虽然3000条数据很大,但是并不应该影响浏览器请求接口。这里有关浏览器的知识。多进程和js单线程。以下个人理解,如有问题,希望大家补充

浏览器内核中线程的关系。GUI和js引擎互斥。因为js是可以直接操作页面dom的。因此当修改页面上元素属性的同时,GUI渲染页面。那么渲染树上的dom元素的数据可能因为两者共同作用而出问题。所以浏览器为了防止渲染出现数据不一致问题。从根本上就杜绝了GUI渲染线程与js引擎同时作用。两者不能同时作用的原因。也说明了,GUI更新页面内容的同时,JS引擎线程不能被执行。

通过上述分析,我们知道当JS线程进行巨量计算的话,GUI也需要等待。那样用户就会感觉巨卡无比。GUI渲染大量数据的话JS线程也会等待。

分析结论,虽然有3000条数据,但是页面并不卡顿,代表JS线程未堵塞。那么接口堵塞与JS执行无关。

相关知识梳理

浏览器接口调用是在那个进程的工作呢?

带着疑问,我们梳理下浏览器进程的知识点吧。(浅梳理,更深层次大家自行搜索或评论区补充)
浏览器主要的进程有四个。

  1. 主进程。用于资源分配,以及控制其他进程的创建和销毁。是老大的地位。还负责浏览器界面和全局交互(下一页,上一页等),网络资源的管理,下载等。
  2. GPU进程。用于渲染页面。
  3. render进程。渲染每一个页签内容,也是我们前端打交道最多的进程。
  4. 插件进程。承载浏览器内每一个插件。

经验和教训

  • 接口queued问题,仍未为解决,但是应该与js线程无关。
  • 网络资源属于主进程。
  • render进程不应该影响主进程下载。可能与页面渲染有关

结束语

本文意在抛砖引玉,虽然发现问题,分析浏览器行为,但仍未实质解决掉。但范围上,已经限定在渲染上。没有具体指出,是因为大家渲染的组件更不相同,不能统一处理。望理解。

上善若水,水善利万物而不争。 ——老子

举报

相关推荐

0 条评论