目录
问题描述
- 问题表现:某页面 B 发生规律性卡顿。
- 排查现象:
- 新起一个浏览器标签页,独立访问页面 B,无卡顿现象;
- 从页面 A 打开新页面 B,B 发生规律性卡顿;
- 关闭页面 A ,页面 B 无卡顿现象;
- 保持页面 A 开启,手动新增一个浏览器标签页,输入页面 B 的 url,B 无卡顿现象;
- 结论:只有从页面 A 打开的页面 B,才会发生定期卡顿现象。
调试过程及原因
打开 chrome 浏览器的任务管理器。
发现从页面 A 打开页面 B 时(这里用了window.open()),页面 A 与页面 B 共用了一个进程。因页面 A 会定时执行大量页面渲染动作,CPU 陡增,导致页面 B 发生规律性卡顿。
注:下图仅为多标签页共用同一进程的示例图,并非真实的问题网站。
沉淀
一般情况下,每打开一个浏览器标签页,会新开一个独立进程,即使两个标签页打开的是同一个页面。如下图所示。
但,如果是通过一个标签页打开另一个标签页时,Chrome 浏览器,可能会将两个标签页共用一个进程。下面具体展开来说这种情况。
在新窗口中打开页面链接的三种方式:
这部分不配图了,请大家打开自己的 Chrome 任务管理器,随时观察吧。
1. 指定了 target="_blank" 的 a 标签
// 假设当前页面链接为:https://www.baidu.com/
// 通过两个 a 标签,分别打开两个页面,如下:
<a href="https://www.ba