Skip to content
目录

12 — 关键设计与思考题

这一篇用来把 Chrome 架构串成答案。

为什么拆分 content 和 chrome

content 放通用 Web 承载能力,chrome 放 Chrome 产品能力。

这样可以让网页渲染核心更稳定、可复用,也避免扩展、同步、翻译、自动填充等产品逻辑污染底层。

为什么要 Site Isolation

不同站点共享同一 Renderer 会增加数据泄露风险。Site Isolation 让站点边界尽量对应进程边界,降低 Renderer 漏洞和 Spectre 类攻击的影响范围。

为什么引入 Mojo

Chrome 多进程架构需要大量 IPC。Mojo 用强类型 IDL 和自动生成代码替代手写消息,降低出错概率,也让服务边界更清楚。

为什么 Network Service 进程化

Renderer 不应直接持有网络特权。Network Service 把网络能力放在可信边界内,便于统一做 CORS、Cookie、缓存、代理、安全策略等控制。

为什么 cc 需要 Pending / Active

主线程生成的新内容可能还没光栅完成。如果直接上屏,会造成卡顿或半成品显示。

Pending / Active 让旧内容继续可滚动,新内容准备好后再原子切换。

为什么沙箱假设 Renderer 已沦陷

浏览器面对的是不可信网页,解析器、JS 引擎、图片和字体解码都有攻击面。安全设计不能假设 Renderer 永远正确,所以要用沙箱限制它的系统能力。

高频思考题

Browser、Renderer、GPU、Network 各做什么?

Browser 管 UI、权限、导航和策略;Renderer 管页面内容;GPU 管图形合成和提交;Network 管网络请求。

Site Isolation 和沙箱有什么区别?

Site Isolation 控制哪些站点数据出现在同一进程;沙箱控制进程被攻破后能做什么。

DOM 在 Blink。V8 负责执行 JS,JS 通过 bindings 调用 Blink 的 DOM / Web API 实现。

为什么 IO 线程也不能阻塞?

很多 IPC、Mojo 和网络消息依赖 IO 路径,阻塞后会影响跨进程通信和整体响应性。

CompositorFrame 在哪里?

Blink 生成绘制内容,cc 组织和光栅后产出 CompositorFrame,viz 负责聚合并提交显示。

总结

Chrome 的关键设计都围绕安全、稳定、性能和可维护性:多进程隔离风险,Site Isolation 隔离站点数据,沙箱限制系统能力,Mojo 支撑服务化,cc/viz 让渲染和合成更流畅。

MIT License.