Chrome 浏览器,多标签页共用一个进程场景

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

问题描述

  • 问题表现:某页面 B 发生规律性卡顿。
  • 排查现象:
    1. 新起一个浏览器标签页,独立访问页面 B,无卡顿现象;
    2. 从页面 A 打开新页面 B,B 发生规律性卡顿;
    3. 关闭页面 A ,页面 B 无卡顿现象;
    4. 保持页面 A 开启,手动新增一个浏览器标签页,输入页面 B 的 url,B 无卡顿现象;
  • 结论:只有从页面 A 打开的页面 B,才会发生定期卡顿现象。

调试过程及原因

打开 chrome 浏览器的任务管理器。
chrome 任务管理器

发现从页面 A 打开页面 B 时(这里用了window.open()),页面 A 与页面 B 共用了一个进程。因页面 A 会定时执行大量页面渲染动作,CPU 陡增,导致页面 B 发生规律性卡顿。

注:下图仅为多标签页共用同一进程的示例图,并非真实的问题网站。
多个tab共用一个进程

沉淀

一般情况下,每打开一个浏览器标签页,会新开一个独立进程,即使两个标签页打开的是同一个页面。如下图所示。
一个独立tab分配一个独立进程
但,如果是通过一个标签页打开另一个标签页时,Chrome 浏览器,可能会将两个标签页共用一个进程。下面具体展开来说这种情况。

在新窗口中打开页面链接的三种方式:

这部分不配图了,请大家打开自己的 Chrome 任务管理器,随时观察吧。

1. 指定了 target="_blank" 的 a 标签

// 假设当前页面链接为:https://www.baidu.com/
// 通过两个 a 标签,分别打开两个页面,如下:
<a href="https://www.baidu.com/balabala" target="_blank">
	打开一个新百度
</a>
<a href="https://www.csdn.net/" target="_blank">
	打开一个新 CSDN
</a>

发现,同源的页面会被分配在同一个进程中。而非同源页面会分配一个新的进程。

如果希望同源页面也可以分配一个独立进程,可以为 a 标签,指定 rel 属性。即可切断新页面与当前页面的联系。如下:

// 假设当前页面链接为:https://www.baidu.com/
// 新增 rel 属性,指定 noopener 或 noreferrer
<a href="https://www.baidu.com/balabala" target="_blank" rel="noopener noreferrer">
	打开一个新百度
</a>

2. window.open() 方法

// 假设当前页面链接为:https://www.baidu.com/
// 在控制面板分别执行以下命令
window.open('https://www.baidu.com/balabala');
window.open('https://www.csdn.net/');

发现,同源的页面会被分配在同一个进程中。而非同源页面会分配一个新的进程。

如果希望同源页面也可以分配一个独立进程,按照书上说的(红皮书,第 3 版,P201),我做了如下尝试:

有些浏览器(如 IE8 和 Chrome)会在独立的进程中运行每个标签页。当一个标签页打开另一个标签页时,如果两个 window 对象之前需要彼此通信,那么新标签页就不能运行在独立的进程中。在 Chrome 中,将新创建的标签页的 opener 属性设置为 null,即表示在单独的进程中运行新标签页,如下所示。
… …
将 opener 属性设置为 null 就是告诉浏览器新创建的标签页不需要与打开它的标签页通信,因此可以在独立的进程中运行。标签页之间的联系一旦切断,将没有办法恢复。

// 假设当前页面链接为:https://www.baidu.com/
var newWin = window.open('https://www.baidu.com/alala');
newWin.opener = null;

预期这次两个 baidu 会分别起一个独立进程,然而,依然在同一进程中…

3. iframe 内嵌页面

// 假设当前页面链接为:https://www.baidu.com/
<iframe src='https://www.baidu.com/balabala'></iframe>
<iframe src='https://www.csdn.net/'></iframe>

发现,同源的 iframe 没有新起一个任务(一开始还以为自己写错了…),而非同源 iframe 页面作为一个“辅助框架”新起了一个任务,并且分配了一个独立进程。
页面中 iframe 的进程情况

写在最后的话:

再强调一下:写这个记录的时候,仅观察了 Chrome 的表现。
附上当前的 Chrome 版本信息:版本 75.0.3770.142(正式版本) (64 位)

Chrome进程体系 <!-- /* default css */table { font-size: 1em; line-height: inherit; border-collapse: collapse;}tr { text-align: left; }div, address, ol, ul, li, option, s 阅读详情

相关推荐

浏览器标签页通信的方式都有什么?

浏览器标签页通信的方式

w807139809的博客 1182

C# winform页面进程打开exe

资源可以在一个winform页面同时加载个exe到页面,并且可以传参数。

BroadcastChannel API:浏览器原生多标签页通信实战指南

BroadcastChannel 是现代浏览器提供的原生客户端通信机制,基于同源策略实现窗口、iframe 与 Web Worker 间的轻量广播。其底层依托浏览器 IPC 通道,规避 DOM 事件循环,相比 localStorage + storage 事件具备更低延迟(<10ms)和更高可靠性。作为 JavaScript API,它无需服务端参与、不触发跨域限制,天然适配 PWA、微前端及多标签页协同场景,如购物车同步、登录态通知与播放进度共享。本文聚焦 BroadcastChannel 的工程落地,涵

weixin_34216107的博客 464

chromium 官方完整文档

google官方文档,国内无法访问,给不方便下载的同学学习使用。包括下载,编译,设计等等。

浏览器一个Tab对应一个渲染进程浏览器渲染进程个数究竟与什么有关系(进程浏览器Chrome为例)

- 父页面的打开的子页面在没有跨域访问的情况下,是会共用父页面的渲染进程的。(more tab one process) - 页面中采用iframe框架引入其他页面,则iframe会独立成辅助框架,有自己的渲染进程。(one tab more process) - 共用渲染进程的数个页面,当顶级的父页面关闭了或者跨域了,则会禅让该渲染进程。 - 新建的标签页也会合并为一个渲染进程,仅限不进行搜索查询的时候,这是谷歌刘浏览器的内存优化策略。

我本可以 2349

Chromedp终极并发控制指南:多标签页浏览器实例的高效管理策略

Chromedp是一个支持Chrome DevTools协议的浏览器驱动工具,提供了快速、简单的方式来控制浏览器。本文将详细介绍如何使用Chromedp实现多标签页浏览器实例的高效管理,帮助开发者掌握并发控制的核心技巧。 ## 为什么需要并发控制? 在自动化测试、网页爬取或批量操作场景中,单一浏览器实例往往无法满足需求。通过并发控制,我们可以同时管理标签页浏览器实例,显著提高工作效率。

gitblog_00386的博客 452

Chrome内存优化终极指南:快速解决浏览器卡顿问题

Chrome浏览器作为全球最流行的网页浏览器,其强大的功能和丰富的扩展生态深受用户喜爱。然而,随着使用时间的增长,Chrome内存占用过高的问题逐渐显现,严重影响浏览器性能和使用体验。本文将为您提供完整的Chrome内存优化解决方案,帮助您彻底解决浏览器卡顿和响应迟缓的困扰。 ## 浏览器内存问题的根源分析 现代浏览器采用进程架构设计,每个标签页、扩展程序都在独立的进程中运行。这种设计虽然提

gitblog_00805的博客 872

Chrome.ahk完整指南:如何用AutoHotkey实现浏览器自动化

Chrome.ahk是一个基于AutoHotkey的Chrome浏览器自动化工具,通过原生方式实现浏览器控制,无需依赖外部库即可完成复杂的网页操作。这个工具让你能够通过AutoHotkey脚本直接与Chrome DevTools Protocol通信,实现高效稳定的浏览器自动化解决方案。 **核心关键词**:Chrome自动化、AutoHotkey浏览器控制、Chrome DevTools Pr

gitblog_01056的博客 445

Chrome浏览器CPU占用率过高:从进程分析到系统优化的完整解决方案

浏览器进程架构是现代Web应用的基础技术,它通过将不同标签页、扩展程序隔离为独立进程来提升稳定性和安全性。然而,这种架构也带来了资源管理挑战,当某个进程出现异常时,可能导致CPU占用率飙升,影响系统整体性能。从技术原理看,这通常涉及JavaScript执行效率、扩展程序兼容性、后台服务调度机制等个层面。在工程实践中,开发者需要掌握进程监控、资源分析和系统调优等技能,才能有效解决这类性能问题。本文针对Chrome浏览器的高CPU占用现象,提供了从任务管理器分析、扩展程序管理到系统级优化的完整排查路径,特别

weixin_30553777的博客 372

Chrome自动化完整指南:用AutoHotkey 5分钟上手浏览器控制

浏览器自动化最常见的劝退点是配置:装 Selenium、对 WebDriver 版本、处理各种依赖冲突,环境还没跑起来,脚本一行没写。Chrome.ahk 给了另一条路——用 AutoHotkey 直接拉起 Chrome 并原生操控它,不经过任何浏览器驱动。这篇教程带你从环境搭建一路跑到实际场景。 ## 项目定位 Chrome.ahk 是一个 AutoHotkey 类库,它直接说 Chrome

gitblog_00521的博客 412

SeleniumBase项目中的CDP模式多标签页管理技术解析

在自动化测试领域,SeleniumBase作为基于Selenium的增强框架,提供了许强大的功能扩展。其中CDP(Chrome DevTools Protocol)模式的引入为处理复杂网页场景提供了新的解决方案。本文将深入探讨CDP模式下的多标签页管理技术。 ## CDP模式的核心机制 CDP模式是通过激活Chrome浏览器的开发者工具协议来实现高级控制的技术。当调用`uc_activate...

gitblog_00361的博客 461

Chrome DevTools MCP 完整指南:3 分钟让 AI 编程助手操控真实 Chrome 浏览器

想让 AI 助手"打开页面、看看控制台、量一下性能",它却只能纸上谈兵?Chrome DevTools MCP(包名 `chrome-devtools-mcp`)就是为了解决这件事:它作为一个 MCP(模型上下文协议)服务器,把你的编码助手——Claude、Cursor、Copilot 这些——接到一个真实运行的 Chrome 上,由 Puppeteer 驱动页面操作,再由 Chrome DevT

gitblog_01171的博客 400

Selenium连接已打开Chrome浏览器:实现会话复用与状态保持的完整指南

在Web自动化测试与数据抓取领域,会话管理与状态保持是提升效率和稳定性的关键技术。其核心原理在于通过浏览器提供的调试协议(如Chrome DevTools Protocol)建立远程通信,使自动化脚本能够直接操控已存在的浏览器实例,而非每次创建新会话。这项技术的核心价值在于实现了会话复用,能够无缝继承人工操作留下的登录态、Cookies及本地存储数据,从而绕过繁琐的登录流程和潜在的风控限制。在应用场景上,它极大地赋能了自动化测试、RPA流程以及需要依赖特定会话状态的网页数据抓取任务。本文聚焦于Seleniu

weixin_30855099的博客 340

麒麟环境下Chrome MCP Server 保姆级教程:AI接管浏览器+OpenCode配置实测

摘要:ChromeMCPServer是一款基于Chrome插件的AI浏览器自动化工具,可直接复用现有Chrome环境,保留用户登录态和配置。相比Playwright等传统方案,它具有本地运行保障隐私、响应更快、兼容性更好等优势,特别是在国产麒麟系统中能稳定运行(Playwright易出现假死问题)。文章详细介绍了从插件安装、桥接工具部署到OpenCode配置的全流程,并验证了网页操作、内容提取等核心功能。该工具为AI赋能浏览器自动化提供了更高效的解决方案。

qq_14955661的博客 681

绿色无公害Chrome浏览器启动器工具包

启动器的强大之处在于能够根据用途灵活配置 Chrome 的运行模式。以下是几个典型应用场景及其对应参数组合。

weixin_42604188的博客 1095

Wekan on OpenShift:基于 OpenShift Template 与 MongoDB 的持久化部署指南

本文基于 Wekan 仓库 `docs/Platforms/FOSS/Cloud/OpenShift/` 目录下的 OpenShift 部署方案,完整讲解如何通过 OpenShift 原生 **Template(模板)** 机制,在 OpenShift 集群中一键创建一套由 **MongoDB 持久化存储** 支撑的 Wekan 看板实例。文章会逐段剖析仓库内 [wekan.yml](https:

gitblog_00162的博客 392

Playwright 浏览器并发:同时操控 100 个 Chrome 实例

摘要:本文深入探讨了使用Playwright实现100个Chrome实例高并发自动化的完整方案。相较于Selenium,Playwright凭借原生浏览器支持、异步API和轻量级上下文隔离等优势,成为大规模浏览器集群的首选工具。文章从并发模型设计入手,详细讲解了浏览器池与任务队列的实现方法,结合内存优化、请求拦截等技巧解决资源瓶颈问题,并提供了分布式部署与容器化方案。通过三层架构(Browser-Context-Page)和混合并发策略,开发者可在单台服务器稳定运行百级浏览器实例,且可扩展至更大规模集群,

weixin_41943766的博客 1892

火狐浏览器Chrome浏览器的性能与隐私深度解析

本文深度解析火狐浏览器Chrome浏览器在性能、内存管理、隐私保护和扩展生态等方面的优劣。Chrome在JavaScript执行和Google生态集成上表现优异,而火狐浏览器在内存控制、隐私保护和扩展审核方面更胜一筹。根据数字生活习惯选择合适的浏览器,能显著提升工作效率和隐私安全。

weixin_29216957的博客 433
下一篇: 前端开发环境搭建 - MAC
王家麦子
博客等级 码龄7年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值