交互偶发冻结时,怎样判断问题属于主线程阻塞还是内存压力?
简答题困难612 次浏览
参考答案与解析
# 核心结论
交互偶发冻结时,应把“主线程是否连续被占用”和“内存是否持续承压”作为两条证据链同时调查,不能仅凭一次火焰图或一次堆内存上涨下结论。主线程阻塞通常表现为输入事件长时间排队、长任务持续执行,以及脚本、样式、布局或绘制准备占满时间线;内存压力则更常表现为堆基线持续上升、垃圾回收越来越频繁或耗时增长、页面换页后对象仍被保留。二者还会互相放大:大量短命对象会触发频繁回收,持续存活的大对象会扩大回收扫描范围,而垃圾回收本身又会占用主线程。
# 底层机制
浏览器主线程需要执行脚本、处理输入、运行部分计时器,并参与样式计算、布局和绘制准备。当某个任务长时间不结束时,后续输入和渲染机会只能排队。`Long Tasks A
