浏览器多进程架构中,每个标签页真的是独立进程吗? UX美荣 提问于 2026-03-15 19:41:20 阅读 89 前端 最近在看浏览器架构的资料,说现代浏览器用的是多进程模型,但我在任务管理器里观察 Chrome,发现有时候多个标签页共用一个进程,有时候又分开。这到底是什么规则?是不是和同源策略或者 iframe 有关系? 我试过打开不同域名的网站,比如 https://example.com 和 https://test.com,确实分开了进程,但两个相同域名的页面有时却在一个进程里。这是浏览器的优化策略吗?有没有办法强制每个标签页都独立进程? 我来解答 赞 9 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 打工人小敏 Lv1 我之前踩过这个坑,确实挺让人困惑的。现代浏览器采用多进程架构是为了提高稳定性和安全性,但并不是所有标签页都严格独立为一个进程。浏览器会根据一些策略来决定是否将标签页分配到同一个进程。 首先,浏览器会尽量把同源的标签页放在同一个进程中,这样可以共享一些资源,提升性能。这就是为什么你有时候会看到同一域名下的不同页面在同一个进程里。不过,如果你打开了很多标签页,或者某些标签页做了大量的内存操作,浏览器也会把这些高消耗的标签页拆分到不同的进程中,以防止单个进程占用过多资源导致其他标签页卡顿。 至于你提到的强制每个标签页独立进程,其实 Chrome 提供了一个命令行参数 --site-per-process 可以做到这一点。不过这个选项通常只用于调试或特定的安全测试场景,并不推荐在日常使用中开启,因为它会显著增加内存消耗。 总的来说,浏览器的进程分配策略是为了平衡性能和资源使用,有时候看到多个标签页在同一个进程里也是正常的优化表现。 回复 点赞 2026-03-20 20:06 W″玉楠 Lv1 你观察得很仔细啊!确实是这样,浏览器并不是简单地给每个标签页分配一个独立进程,而是有一套复杂的策略来做这个决策。 基本规则是这样的: Chrome 默认采用 "process-per-site-instance" 模型。简单说就是:相同站点的页面会尽量共享一个渲染进程,不同站点的页面则分开。这里的"站点"判断是基于 eTLD+1,比如 example.com 和 test.example.com 会被视为同一个站点,所以它们大概率会共用进程。而 example.com 和 test.com 肯定分开。 这确实是一种优化策略。如果每个标签页都独立进程,那内存占用会飙升,而且进程间切换也有开销。浏览器需要在安全性和性能之间找平衡。 和 iframe 的关系: 当页面包含跨域 iframe 时,这个 iframe 会被放到独立的渲染进程中运行。这就是为什么你看到一个页面里有多个进程的原因——主页面一个进程,跨域的 iframe 单独一个进程。 强制每个标签页独立进程的方法: 可以试试 Chrome 的启动参数。右键点击 Chrome 快捷方式,目标路径后面加上 --process-per-tab,这样每个标签页都会是独立进程。不过说实话,日常使用没必要这么做,Chrome 默认的策略已经很合理了。 还有个参数是 --disable-gpu-sandbox,不过这个会降低安全性,不建议日常使用。 总的来说,浏览器这套进程分配逻辑就是在保证安全隔离的前提下,尽量减少资源消耗。你看到的现象完全正常,不用太纠结~ 回复 点赞 2026-03-16 14:50 加载更多 相关推荐 1 回答 77 浏览 微服务架构下前端如何统一管理多个子应用的登录状态? 我们项目用微前端拆了几个子应用,每个子应用都是独立部署的微服务,现在登录状态没法同步,用户在一个子应用登录后,切换到另一个还是未登录状态,这体验太差了。 试过把 token 存 localStorag... UI泽睿 框架 2026-03-22 20:53:19 2 回答 63 浏览 文件拖拽上传时怎么阻止浏览器默认打开文件? 我在做文件拖拽上传功能,但每次把图片拖进页面,浏览器就直接在新标签页打开了那张图,根本没法上传。我试过给容器加了 preventDefault(),但好像没生效。 这是我的 HTML 结构: <... 广云 交互 2026-03-09 16:40:20 2 回答 122 浏览 微前端应用中如何避免重复加载相同版本的公共库? 我在搭建微前端架构时发现,当多个子应用同时依赖同一版本的React, 每个子应用都会独立加载React包,导致控制台报错:React has been called from "react@18.2.... 设计师永景 框架 2026-02-15 09:55:32 2 回答 114 浏览 浏览器通知在新标签页打开后就失效了怎么办? 我在用Notification API做消息提醒时遇到个怪问题,当用户点击通知跳转到新标签页后,后续的通知就完全收不到了。之前按MDN文档写了基础权限请求和显示代码,测试时发现只要打开新标签页,后续调... 子荧~ 交互 2026-02-14 05:18:50 1 回答 88 浏览 为什么本地 HTTPS 接口请求会被浏览器拦截? 我在本地用 Node.js 搭了个 HTTPS 服务,证书是自签名的,浏览器访问时点了“高级”→“继续前往”能打开页面。但页面里用 fetch 请求同一个域名的 API 时,却直接报错说不安全,连提示... 码农明艳 前端 2026-03-30 23:34:17 1 回答 65 浏览 Babel 转译后为什么每个文件都重复注入 helper 函数? 我用 Babel 转译 React 项目时,发现每个文件里都重复生成了像 _classCallCheck、_createClass 这样的 helper 函数,导致打包体积变大。明明配置了 @babe... 萌新.伊可 工具 2026-03-29 14:34:12 2 回答 84 浏览 为什么浏览器发送的POST请求变成了OPTIONS? 我在用 fetch 发送 POST 请求到后端接口,结果浏览器自动先发了个 OPTIONS 请求,而且我的 POST 根本没发出去,这是为啥? 我试过加了 Content-Type: applicat... 一丽君 前端 2026-03-26 20:43:19 1 回答 78 浏览 大文件上传时浏览器崩溃怎么办? 我用普通的 FormData 上传一个 2GB 的视频文件,结果浏览器直接卡死甚至崩溃了。试过 Chrome 和 Edge 都一样。 是不是不能一次性读整个文件?有没有办法分片上传?我看到有些网站能传... 令狐景荣 交互 2026-03-26 17:36:23 1 回答 64 浏览 PostCSS 自动加浏览器前缀不生效是怎么回事? 我用 PostCSS 配合 autoprefixer 插件,想让 CSS 自动加上浏览器前缀,但写完之后发现像 display: flex 这样的属性根本没加前缀。我明明在 postcss.confi... 欢欢 前端 2026-03-25 18:33:21 1 回答 51 浏览 Electron里主进程和渲染进程怎么传数据啊? 我刚学Electron,想从渲染进程发个消息给主进程,但试了好几次都没反应。官方文档说要用ipcRenderer.send,但我用了之后主进程那边收不到。 我在渲染进程写了ipcRenderer.se... UP主~玉硕 框架 2026-03-25 04:52:18
首先,浏览器会尽量把同源的标签页放在同一个进程中,这样可以共享一些资源,提升性能。这就是为什么你有时候会看到同一域名下的不同页面在同一个进程里。不过,如果你打开了很多标签页,或者某些标签页做了大量的内存操作,浏览器也会把这些高消耗的标签页拆分到不同的进程中,以防止单个进程占用过多资源导致其他标签页卡顿。
至于你提到的强制每个标签页独立进程,其实 Chrome 提供了一个命令行参数
--site-per-process可以做到这一点。不过这个选项通常只用于调试或特定的安全测试场景,并不推荐在日常使用中开启,因为它会显著增加内存消耗。总的来说,浏览器的进程分配策略是为了平衡性能和资源使用,有时候看到多个标签页在同一个进程里也是正常的优化表现。
基本规则是这样的:
Chrome 默认采用 "process-per-site-instance" 模型。简单说就是:相同站点的页面会尽量共享一个渲染进程,不同站点的页面则分开。这里的"站点"判断是基于 eTLD+1,比如 example.com 和 test.example.com 会被视为同一个站点,所以它们大概率会共用进程。而 example.com 和 test.com 肯定分开。
这确实是一种优化策略。如果每个标签页都独立进程,那内存占用会飙升,而且进程间切换也有开销。浏览器需要在安全性和性能之间找平衡。
和 iframe 的关系:
当页面包含跨域 iframe 时,这个 iframe 会被放到独立的渲染进程中运行。这就是为什么你看到一个页面里有多个进程的原因——主页面一个进程,跨域的 iframe 单独一个进程。
强制每个标签页独立进程的方法:
可以试试 Chrome 的启动参数。右键点击 Chrome 快捷方式,目标路径后面加上
--process-per-tab,这样每个标签页都会是独立进程。不过说实话,日常使用没必要这么做,Chrome 默认的策略已经很合理了。还有个参数是
--disable-gpu-sandbox,不过这个会降低安全性,不建议日常使用。总的来说,浏览器这套进程分配逻辑就是在保证安全隔离的前提下,尽量减少资源消耗。你看到的现象完全正常,不用太纠结~