☰
Chromium三浏览器多标签内存占用与后台回收实测
2026/11/3 15:31:41 网站建设 项目流程

打开三十多个标签页一直不关,是我这几年最典型的工作状态:左边一排是待读的文档,中间是后台控制台和几个在线表格,右边还挂着两个数据看板。这种用法对浏览器的考验不在打开速度,而在连续开八小时之后,任务管理器里那个数字会不会一路往上爬。我这台 16GB 内存的机器上,Chrome、Edge 轮着用了一年多,最近又把 Yandex 浏览器当作主力跑了两周,顺手做了一轮横向对比,重点就盯着多标签页的内存占用和后台回收策略。这篇文章不讲跑分截图,只讲我怎么设计这组测试、数据为什么长这样、以及哪些开关是真的省内存、哪些只是心理安慰。适合每天标签页开过二十个、又不想频繁重启浏览器的人看,也适合想搞清楚 Chromium 系浏览器内存到底花在哪的人看。

1. 先算清楚你在测什么:三个浏览器的同源底子

1.1 内核同源不等于内存表现同源

Yandex 浏览器、Chrome、Edge 现在都跑在 Chromium 这一套底座上,渲染用的是 Blink,脚本引擎是 V8,进程模型也是同一套:一个浏览器主进程管 UI 和调度,一个 GPU 进程管合成,网络服务和存储服务各自独立,每个页面(严格说是每个站点实例)单独开渲染进程。听起来应该表现一致,但实测下来差距能到 15% 以上,原因全在”底座之上还盖了什么”。

打个比方,这三家像是同一款发动机装在三台配置不同的车上。发动机、变速箱是一样的,但一台车装了行李架、一台加了后排空调、一台把备胎换成了全尺寸,风阻和自重一上来,油耗自然拉开。落到浏览器上,这层”额外配置”具体包括:内置功能的常驻进程数量(比如内置的广告拦截、翻译、密码管理、同步客户端)、预加载和预渲染的激进程度、后台标签页的回收阈值、UI 层是用原生控件还是自绘、以及默认开启的后台服务有多少。

我这轮测试里最直观的差异出现在冷启动后的空载状态:什么都不开,只留一个新标签页,三者的总内存占用差了将近 200MB。这个差距本身不大,但它是一个基数,后面每开一个标签都在这个基数上叠加。所以做对比测试的时候,如果只测”开 50 个标签时的总量”,你其实把”空载基数”和”单标签增量”两个变量混在一起了,得出的结论没法指导调优。

1.2 测试基线不统一,数据基本白测

我见过太多”浏览器内存对比”文章直接甩一张表格,连测的是什么口径都不写。这里有几个必须锁死的变量,少锁一个数据就没法比。

第一是版本。Chromium 的进程模型和内存回收逻辑在大版本之间改过好几次,尤其是内存节省模式上线之后,不同版本的行为差异很大。我这轮测试统一用同一时期各自的最新正式发布版本,并且把三者的 Chromium 内核大版本号对齐到同一档,避免拿一个老版本去比一个新版本。

第二是扩展。扩展是内存占用的隐形大户,一个后台常驻的扩展自己就是一个进程。测试阶段我全部禁用,包括我自己平时必装的那几个。

第三是窗口尺寸。这条很多人忽略:渲染进程的内存和可视区域大小正相关,图层、合成缓存、位图都跟视口挂钩。全屏和 800×600 小窗,同一个页面能差出几十兆。

第四是读数时机。页面打开后的前 30 秒,预加载、字体加载、图片解码、垃圾回收都还在跑,这时候读到的数偏高且不稳定。我统一在打开后静置 60 秒再读数,每个档位重复三次取中位数。

第五,也是最容易搞错的一点:读数口径。浏览器内置任务管理器里显示的是”私有工作集”,系统监视器里看到的是包含共享内存的总工作集,而 Chromium 内部还有一个”提交大小”。三个数不一样,GPU 进程和各渲染进程之间还有共享的内存页,简单相加会重复计数。我的做法是统一用浏览器内置任务管理器(Shift+Esc 呼出)的”内存占用”列做横向比较,因为它已经做了共享内存的去重处理,虽然绝对值偏保守,但横向对比是可信的。

测试项设定
硬件16GB 内存,四核八线程,集成显卡,固态硬盘
系统桌面版系统,最新补丁
浏览器版本三者均取同期最新正式发布版,内核大版本对齐
扩展全部禁用,仅保留一个空白对照组测试启用后的增量
窗口最大化,固定分辨率,不进入全屏
硬件加速三者全部默认开启
读数时机页面打开后静置 60 秒,重复三次取中位数
读数工具浏览器内置任务管理器内存列 + 系统监视器交叉验证

2. 三档标签压力测试:内存曲线的拐点在哪

2.1 测试页面怎么选才算”公平”

标签页内存占用跟页面本身关系太大了。一个纯文本博客和一个在线表格,单页差出十倍很常见。为了让三家的数据可比,我把测试页面分成固定配比,三个浏览器打开的是完全同一批 URL,顺序一致,打开间隔一致(每个标签间隔 3 秒,避免瞬时并发把网络服务和渲染进程一起打满)。

配比是这样的:60% 是资讯类和技术文档类页面,属于”文本为主、少量图片”;20% 是交互较重的单页应用,包含在线表格和看板;10% 是视频页面,但全部暂停播放,只加载首帧和播放器;剩下 10% 是长列表页面,故意选那种无限滚动的,用来观察布局内存的增长。

为什么不放正在播放的视频?因为媒体解码的内存占用高度依赖硬件解码能力和编码格式,变量太多,在 16GB 集成显卡的机器上测出来的结论对独显机器没有参考价值。暂停状态的视频页已经能反映播放器实例本身的常驻开销了。

2.2 30 / 80 / 150 三个档位的实测数据

下面是这轮测试的核心数据。三个档位分别模拟”轻度多开”“日常重度”和”极端囤积”三种用法。表里的数字是整机口径下浏览器占用的总内存,单位 GB。

标签数ChromeEdgeYandex
空载(1 个新标签页)0.420.380.55
30 个2.101.922.28
80 个4.623.904.41
150 个7.856.427.18
150 个(触发后台回收后)3.603.053.32

这组数据里有几个值得说的点。

空载基数 Yandex 最高,比 Edge 多了 170MB 左右。原因不难猜:它内置的功能模块更多,标签页侧边栏、内置拦截、手势支持这些东西都有自己的常驻开销。这个差距在开 30 个标签时依然存在——Yandex 的 2.28GB 是三家里最高的。

但到了 80 个标签,排名变了。Yandex 反超 Chrome,比 Chrome 少了约 200MB。到了 150 个,差距拉大到 670MB。这个拐点很关键,它说明 Yandex 的后台标签回收触发得比 Chrome 更早、更积极。换句话说,它在前台体验上多花了内存,但在后台管理上省回来了。

Edge 全程最低,而且优势很稳定。这跟它的睡眠标签页机制上线得早、阈值调得比较激进有关。但要注意,Edge 的低占用有一部分是”代价换来的”——后面讲回收机制的时候会详细说这个代价是什么。

2.3 光看内存不够:还要看切换延迟和崩溃点

内存数字好看,切回去卡三秒,那这优化就是失败的。所以我加测了两个指标:标签切换的响应延迟,以及继续加标签到崩溃为止的上限。

切换延迟我用一个笨办法:在 80 标签的场景下,按 Ctrl+Tab 循环切换,用秒表记录从按键到页面完成绘制的时间,每个浏览器循环 20 次取平均。结果 Edge 平均 0.38 秒,Chrome 0.45 秒,Yandex 0.41 秒。差距不算悬殊,但体感上能分辨出来——Edge 从睡眠状态唤醒的标签,会先显示一个骨架再补内容,视觉上给了”已经在动”的反馈,感知延迟更低。

崩溃点这方面,我这台 16GB 的机器在 150 个标签时都还没崩,但系统整体开始吃紧,切出去再切回来会出现明显的整体卡顿。再往上加,最先出问题的是 Chrome,到 180 个左右时开始有渲染进程被系统回收再重载;Yandex 撑到了 175 个;Edge 在 190 个左右才出现同样现象。这个顺序和内存曲线是吻合的。

提示:这组数据只在我这套配置和这批页面上成立,换一台 8GB 的机器,回收阈值会更早触发,结论可能反过来。测内存这种事,报环境比报数字重要。

3. 谁在悄悄吃掉你的后台标签:回收机制拆解

3.1 标签页的生命周期不止”开着”和”关了”两种

要理解那 670MB 的差距从哪来,得先知道一个标签页从打开到被回收,中间会经过哪几个状态。Chromium 有一套页面生命周期规范,粗分是四档:活跃、隐藏、冻结、丢弃。

活跃就是你能看见、能交互的状态,渲染进程满速跑,动画、定时器、网络轮询全在。隐藏是你切到别的标签去了,页面看不见但仍在前台进程里,定时器被节流到每秒一次,动画的帧回调基本停掉,但内存一点没少——DOM 树、样式、图片解码缓存全都还在。冻结是更进一步,定时器彻底停掉,只保留最基本的结构,恢复时几乎无感。丢弃最狠,整个渲染进程被干掉,只留一个占位符,你切回去的时候重新加载一遍。

三家浏览器的差异,本质就是这三个阈值卡在哪:什么时候从隐藏转冻结,什么时候从冻结转丢弃,以及哪些页面被列入豁免名单。

Chrome 的内存节省模式,默认在标签页不活跃一段时间后直接进入丢弃状态。它的判断逻辑相对保守,对某些类型的页面会手下留情,比如正在播放音频的、有未提交表单的、被固定住的标签。这个保守是有道理的,但代价就是回收得不够彻底,80 标签场景下它的占用比 Yandex 高。

Edge 的睡眠标签页机制分得更细,可以设置触发时间,最短 1 分钟最长 12 小时。它的做法更接近”冻结 + 部分释放”,把页面的渲染资源释放掉,但保留一份轻量快照,所以唤醒速度快。你在设置里还能给特定站点加白名单,避免重要的后台页面被睡过去。

Yandex 这边,标签页休眠是内置的,默认就开着,触发条件我实测下来比 Chrome 更激进,尤其是在标签数量多的时候——它会动态调整阈值,标签越多,回收越早。这解释了为什么它在 30 标签时内存最高,到 80 标签时反超。

机制Chrome 内存节省模式Edge 睡眠标签页Yandex 标签页休眠
默认是否开启是是是
触发时间可调范围较短,档位少1 分钟至 12 小时,档位多档位较少,随标签数动态调整
回收方式以丢弃为主,重载恢复冻结为主,保留快照,唤醒快随负载动态,重载恢复
站点白名单支持支持,粒度较细支持
后台音频是否豁免是是是

3.2 回收机制的副作用,比省下来的内存更值得关注

内存回收不是免费的。你省下的那 3GB,代价可能是一次三秒钟的重载,或者更糟——表单内容没了。

我踩过最难受的一次是填一个长表单,中途切去查资料,回来之后页面自己重载了,二十分钟的工作量归零。这就是标签被丢弃的直接后果。三家浏览器都会给”有未提交表单”的页面加豁免,但这个判断有盲区:单页应用里的富文本编辑器、用了自定义输入组件的页面,浏览器往往识别不出来,照样给你回收掉。

第二类副作用是连接断开。后台标签如果挂着长连接(比如实时协作、消息推送),被冻结或被丢弃之后连接会断,回来要么重连,要么直接显示离线状态。做实时协作类应用的人应该对这个很敏感。

第三类是媒体中断。后台播放的音乐被打断,或者视频会议页面被静音,这类问题在唤醒策略不够聪明的浏览器上更常见。三家默认都会豁免”正在播放音频”的标签,但如果你把音频暂停了又切走,它就可能被算作普通后台页。

第四类是滚动位置和界面状态丢失。这个相对轻,但很影响体验,尤其是长文档读到一半,回来后停在顶部。

注意:如果你经常在浏览器里填长表单,或者挂着后台的实时看板,务必把对应域名加进回收白名单。这个设置项在三个浏览器里都有,位置都在隐私或性能相关的设置分组里,找起来不费劲,但很多人从来没用过。

4. 把内存压下去的实操配置:从开关到启动参数

4.1 三个浏览器各自的省内存开关怎么开

先说 Chrome。设置里搜”内存”,找到内存节省模式,打开。它的同级还有个”节能模式”,那个是限制后台活动来省电的,跟省内存是两回事,别搞混。内存节省模式下面有个”始终保持这些网站处于活动状态”的列表,这就是白名单,把你常用的在线文档、后台控制台、协作工具加进去。我的习惯是加三到五个域名,加太多等于没开。

Edge 在设置里的”系统和性能”分组,睡眠标签页有独立开关,还有个”使用睡眠标签页节省资源”的细化选项。这里有个容易忽略的点:它允许你设置”从不休眠”的站点,同时还有一个”空闲标签页在以下时间后进入睡眠”的时间滑块。我一般设成 30 分钟,比默认值稍长一点,因为这个时间太短的话,来回切两次就会触发重载,反而降低效率。

Yandex 的标签页休眠在设置里搜”标签页”能找到,开关比较直接。它额外提供了一个标签页侧边栏的管理面板,可以按内存占用排序,一眼看出哪个页面是大户。这个功能我在别家没见到同等便利的,挺实用——有时候某个页面内存异常高是因为它有内存泄漏,排序一看就露馅了。

顺带说一个三家都通用的技巧:固定标签页。把常驻的核心标签(邮箱、日历、待办)固定住,它们会缩成小图标,而且多数情况下会被排除在回收之外,不会被反复重载。这个习惯我坚持了好几年,五到八个固定标签,其余全部浮动,内存曲线明显更平。

4.2 扩展瘦身:每个常驻扩展都是一个进程

扩展对内存的影响经常被低估。一个带后台脚本的扩展,自己就有一个独立进程,起步就是几十兆。装十个这样的扩展,五百兆就出去了,跟你少开五个标签省下来的量差不多。

我的做法是把扩展分三类。第一类是必须有后台常驻的,比如密码管理、下载管理,这类保留,但只留一个。第二类是只在特定页面起作用的,比如阅读模式、划词翻译,这类在 MV3 规范下会改成按需激活,常驻开销小很多,可以留。第三类是”装了但一个月用不到一次”的,直接卸,不要留着”万一有用”。

我实测过启用一个常驻扩展的增量:在一台已经开到 60 标签的浏览器上加装一个带后台脚本的扩展,内存多了大约 60MB,并且这个进程会一直挂着。十个就是 600MB,这个账很好算。

4.3 启动参数和实验性开关:能用,但要清楚代价

网上流传很多”省内存启动参数”,比如限制渲染进程数量的、强制同站点复用进程的。这些参数确实能压数字,但代价是稳定性和隔离性。

拿--renderer-process-limit来说,它的作用是限制同时存在的渲染进程上限。设成 10,意味着第 11 个标签要复用前面的进程,内存看起来降了,但一个页面崩了会连带其他页面一起崩,而且站点之间的隔离被削弱了,这是安全层面的问题,不建议为了省内存去动。

--process-per-site是让同一站点的多个标签共用一个进程。对那种开了十几个同站点标签的场景,省内存效果很明显,但同样牺牲了隔离性。我自己试过,日常用一段时间后遇到过一次整组页面一起白屏,之后就没再用了。

真正有价值的实验性开关很少。如果你看到某个开关说能”减少 50% 内存”,大概率是关掉了某个功能(比如预渲染、图片延迟解码)换来的。这些功能关掉之后,你的浏览体验会变差,只是你不一定立刻察觉。

提示:动启动参数之前,先在新开的用户配置里试,别在主配置上折腾。出问题的时候你至少还有一份能用的配置。

5. 实测里那些不听话的数据:踩坑记录

5.1 数据漂移的四个来源

做完第一轮测试,我把数据发给朋友看,他复现了一遍,结果差了 20%。排查下来是四个原因,写出来给打算自己做测试的人避坑。

第一个是后台更新和索引。测试期间系统可能在做磁盘索引、浏览器可能在后台下载更新组件,这些都会抢资源并影响内存读数。我的做法是测试前把自动更新暂停,关闭其他所有应用。

第二个是显卡驱动的差异。硬件加速开着的时候,页面合成的工作交给 GPU,显存和系统内存之间会动态调度。不同驱动版本对这个调度策略的实现不一样,同一台机器换个驱动版本,测出来的总内存可能差几百兆。这一条基本无解,只能如实记录环境。

第三个是页面本身的不确定性。资讯类页面会加载广告和追踪脚本,同一个 URL 两次打开,加载的第三方脚本数量可能不同。我的处理办法是开一个干净的网络环境、禁用扩展、并且在读数前等 60 秒让异步加载跑完。即便这样,三次读数的波动仍然有 5% 左右,所以一定要取中位数。

第四个是预热效应。第一次打开某个页面会比第二次慢、占用也更高,因为有字体缓存、编译缓存这些一次性开销。测试顺序会影响结果,所以三个浏览器的测试要交替进行,而不是先测完一家再测另一家。

5.2 恢复会话时的二次内存峰值

这是我踩得最深的一个坑。测”150 个标签”这一档的时候,我习惯性关掉浏览器再重开恢复会话,结果发现重开后的内存峰值比正常打开还高。

原因在于恢复会话时,所有标签是并发加载的。正常打开是一批一批来,系统有时间回收,而恢复会话是一口气全上,网络服务、渲染进程、图片解码同时打满。那一瞬间的内存能冲到正常状态的 1.3 倍,我这台机器上直接触发了一次系统级的进程回收,有十几个标签加载失败显示空白页。

解决办法是开启”启动时恢复上次会话”的同时,配合浏览器的”延迟加载后台标签”选项。Chrome 和 Edge 在设置里都有类似的选项,作用是启动时只加载当前激活的标签,其他标签等你点过去再加载。Yandex 也有对应设置。打开之后,恢复 150 个标签的瞬时峰值能压到正常水平的 1.05 倍以内,代价是你第一次切到每个标签时要等半秒。

这个取舍我觉得很值——反正那 149 个标签你也不会在同一个瞬间全看完。

5.3 硬件加速到底该开还是该关

网上有个流行说法是”关掉硬件加速能省内存”。这话半对半错。

关掉硬件加速之后,页面合成从 GPU 进程转回渲染进程用 CPU 做,确实少了一个 GPU 进程占的那部分内存(通常一两百兆),但渲染进程自己的内存反而涨了,因为图层缓冲改存在系统内存里。总体上内存不一定降,CPU 占用倒是实打实上去了,滚动和视频播放也更容易卡。

我实测的结果是:在集显机器上,开关硬件加速的总内存差异在 ±5% 以内,基本属于噪声范围。真正需要关掉硬件加速的场景是驱动有 bug、画面出现闪烁或者花屏,那是兼容性问题,跟省内存没关系。

6. 按场景选:我最终的取舍

6.1 几十个标签常驻的重载办公

如果你跟我一样,标签页长期在 40 到 100 之间,那我的结论是:内存这件事上 Edge 最省心,Yandex 次之且更有特色,Chrome 表现中规中矩。

Edge 的优势在于睡眠标签页机制成熟、时间档位细、白名单好用,而且它的唤醒速度快,代价小。日常用下来,我基本感觉不到标签被睡过——切回去内容还在,滚动位置也在。这是”回收做得无感”的典型。

Yandex 的优势不在绝对数值,而在可观测性和可操作性。它的标签页侧边栏能按占用排序,这个功能对我这种喜欢搞清楚”到底是谁在吃内存”的人来说太顺手了。另外它的标签管理交互做得比较顺手,垂直侧边栏在标签很多的时候比顶部横排好用得多,能一眼看到全部标签的标题,不用在十几个小方块里猜。

Chrome 的定位比较尴尬。它的内存节省模式上线晚,档位少,白名单功能也简单。但它的优势是生态和调试工具的完整度,如果你是开发者,需要频繁开 DevTools,Chrome 依然是最顺手的。

6.2 标签不多但单个页面极重

如果你的用法是只开七八个标签,但每个都是在线表格、数据看板、视频会议这种重页面,那上面的排名会完全反过来。

这种场景下,空载基数的影响被稀释,决定因素是单个页面的渲染效率。我这轮测试里,同时打开三个大型在线表格加一个视频会议页面,Chrome 的总占用是 2.8GB,Edge 是 2.6GB,Yandex 是 2.9GB。差距不大,但 Yandex 略高,还是那个原因——它的内置模块多,基础开销压不下去。

这种场景下我的建议是别太纠结浏览器选型,转而优化页面本身:把不看的标签关掉而不是留着、把视频会议的虚拟背景关掉、在在线表格里关掉不必要的数据透视。这些操作省下来的内存,比换浏览器多得多。

6.3 我自己现在的配置

跑了这两周之后,我把主力换成了这样一个组合:日常浏览和多标签办公用 Edge,因为它的回收机制最无感;需要同时开几十个同主题标签做资料搜集时用 Yandex,侧边栏加按占用排序在整理资料的时候效率明显更高;调试和开发还是回 Chrome,DevTools 的完整度没有替代品。

这个组合听起来麻烦,但实际用起来就是三个不同的用户配置,各开各的,互不干扰,也顺便把内存分摊到了三个进程树里。三家的数据也不共享,各管各的,反而是个额外的好处。

最后分享一个我用了很久的小习惯:每天下班前不关浏览器,而是把所有标签存成一个书签文件夹,然后关掉。第二天按需打开,只挑真正要用的。这个习惯让我的标签数从来没超过 80,也让我彻底摆脱了”标签越开越多、内存越吃越满、最后只能重启”的循环。工具再优化,也顶不上一个好习惯。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询