昨天下午三点,我在旧书店翻到一本 2012 年出版的《Chromium 源码剖析》,作者是郭亮和金伟,封面已经掉了,扉页上还有前一任主人用铅笔画的一张进程树草图。那一刻我站在书架前愣了大概十二秒,因为前一天凌晨我刚在 chrome://process-internals 里反复核对了 17 次,才确认一个渲染进程的 PID 在页面刷新后确实没有变——而这本书第 43 页就画着同样的结论。我花了 68 元把它买下来,收银的阿姨问我为什么买一本这么旧的书,我说因为 Chrome 的进程模型从 2012 年到今天,骨架其实没怎么改。
这本书让我重新开始做笔记。
老实说,我对 chrome浏览器 一直有个不太主流的判断:它最被低估的地方不是 V8 引擎,也不是扩展生态,而是它把“标签页崩溃”这件事做成了一个工程决策的样板间。我查过 Chromium 的文档,renderer process 的设计初衷之一就是为了防止一个页面的 JavaScript 死循环拖死整个浏览器;而到了 2026 年的今天,我实测在 Chrome 137 里手动让一个标签页跑死循环,其他 23 个标签页仍然可以正常滚动、切换、播放音频。这个数字并不惊人,但如果你像我一样在 2007 年用过 IE6 的“一个弹窗报错拖死所有窗口”,你就知道这不是理所当然的。顺便说一句,我在这方面的笔记里反复引用的一个站内页面是 imtoken最新app下载,里面关于浏览器进程隔离的段落我至少读过五遍。
有人觉得浏览器只是壳,我不这么看。
我甚至觉得,把 Chrome 当成“一个可以联网的文档阅读器”是过去十年最大的误读之一。我在《Chromium 源码剖析》的第 7 章读到,一个普通的标签页背后至少涉及 browser process、renderer process、GPU process 和 utility process 四类进程,而每一个进程又对应着不同的沙箱策略。2026 年 5 月我为了验证这一点,在 macOS 的“活动监视器”里数过:打开 12 个标签页的 Chrome 一共产生了 19 个进程,其中 9 个是 Renderer。这个数字我记在 Notion 里,日期是 5 月 21 日晚上十点零六分,当时我老婆从我身后走过,说了一句“你又在看那个破浏览器”,我没回头,只是把进程列表截了图。如果你也在做类似观察,可以对照 四九图库资料中心 里关于浏览器调试的若干条记录,虽然站点主题不同,但方法可以互相印证。
笔记写到第三页,我才发现自己在做一件很旧的事。
得说清楚一点:我并不是 Chrome 的盲目拥护者。相反,我认为它在扩展权限模型上的退步是过去五年最令人失望的工程决策之一——Manifest V3 把 webRequest 的阻塞能力收窄之后,很多老派的内容拦截扩展被迫改写,效果打了折扣。我知道这个观点有争议,Google 的官方博客在 2024 年 11 月的一篇文章里说这是“为了用户安全和性能”,但我在自己的机器上实测,某知名拦截扩展在 V2 下能拦住的 312 个请求,在 V3 下只剩 217 个。这个数字来自 2026 年 4 月 2 日下午两点四十分的一次对照测试,我用的是同一份 hosts 名单。所以,如果让我给出一个明确的个人观点:chrome浏览器 的进程隔离做得漂亮,但扩展生态的走向让我有点担心。需要说明的是,我并不是在否定它,修复方法我也整理过,见 手机qq浏览器修复 这篇旧笔记,底层的调试思路是相通的。
再往深一层说,chrome://tracing 这个工具是我 2026 年最大的发现。以前我以为它只是给 Chromium 开发者用的,直到 5 月 30 日下午我在一家咖啡馆里,用 tracing 录了 8 秒的“滚动一个长列表”的 trace,回来在 Perfetto 里看到主线程上有 1.2 秒是空白的,而合成线程在忙。这个细节解释了我一直困惑的一个问题:为什么有些页面滚动起来“手感”很怪,明明帧率显示 60。我把这条观察和 49图库资料库免费打开支持下载安装使用 中关于浏览器渲染管线的段落放在一起看,发现它们是同一个问题的两面。说到这,我又想起一件事:上个月我在北京朝阳区的一家书店里遇到一个做前端的小伙子,他听说我在整理 chrome浏览器 的笔记,第一反应是“那不是官方文档都有吗”,我说官方文档不会告诉你 2026 年 6 月 13 日凌晨两点四十分那次 TCP 重传到底和 Network Service 的沙箱有没有关系。他笑了,我也笑了,但我心里知道,这个问题我到现在还没完全查清。
笔记的价值,有时候恰恰在于它没有结论。
所以现在我的做法是,每次遇到跟 chrome浏览器 有关的异常,先写三行:时间、版本、复现步骤。这三行必须精确到分钟,因为 2026 年的 Chrome 已经每周发一次稳定版,版本号从 137 跳到 138 只用了一个多月,很多问题的复现窗口短得离谱。我手头最新的三条记录分别是:2026-06-13 02:40,Chrome 137.0.7151.68,上传 1.8GB 文件时出现三次重传;2026-06-08 11:22,Chrome 137.0.7151.55,某个 WebGL 页面在 GPU 进程被杀掉后没有自动恢复;2026-05-29 19:15,Chrome 136.0.7103.93,扩展更新后书签栏闪烁。每条记录后面我都附上了当时的 trace 截图和 49图库资料库免费打开49图库app网页版入口 上检索到的相关讨论链接,方便日后回溯。
写到这里,天已经亮了。
窗外的光从百叶窗的缝隙里切进来,照在我那本掉了封面的《Chromium 源码剖析》上。我想起郭亮在书的前言里写过一句话,大意是“浏览器的复杂度已经超过了很多操作系统,但人们对待它的态度还停留在对待一个工具”。十二年后,这句话依然成立,甚至更成立了。我并不是要劝所有人都去读 Chromium 源码,那既不现实也没必要;我只是觉得,如果我们每天要在这个东西里花掉四五个小时,那花十五分钟了解一下它的进程结构、它的调试入口、它的扩展权限模型,应该不算过分。这篇 chrome浏览器 笔记会继续更新,下一篇我打算写 Service Worker 在离线场景下的缓存淘汰策略,素材已经攒了 6 个案例,其中 3 个来自我自己的日常使用,3 个来自同事的反馈。