Skip to content

浏览器架构与进程模型

现代浏览器(以 Chromium 为代表)不是「一个程序」,而是一组分工明确、彼此隔离的进程:browser 进程掌管界面与导航编排,每个 tab / 每个站点跑在独立的 renderer 进程里,GPU 合成、网络栈也各自独立成进程或服务。这套架构决定了前端工程师日常遇到的许多「为什么」——为什么一个 tab 崩了别的没事、为什么 iframe 多的页面内存高、为什么 beforeunload 会拖慢导航。本叶从进程/线程基础讲起,走完多进程分工、各进程内部线程、站点隔离,再完整拆解一次导航从输入 URL 到页面加载完成的全流程与交接细节,为「浏览器渲染原理」一叶铺好地基。

概述

  • 多进程架构:browser / renderer / GPU(Viz) / Network Service / utility 各司其职;每个 tab 独立 renderer——一个 tab 崩溃或卡死不拖垮整个浏览器,renderer 还被关进沙箱限制文件访问。
  • 代价与弹性:进程间内存不共享,V8 等基础设施被复制多份;Chrome 按设备内存/CPU 限制进程数,超限后同站 tab 共享进程;Servicification 让服务在强硬件上拆进程、弱硬件上合并省内存。
  • 站点隔离(Site Isolation):Chrome 67 起桌面默认按 site(scheme + eTLD+1)划分进程,跨站 iframe 也独立进程(OOPIF);背景是 Spectre/Meltdown——同进程即可被侧信道读内存;桌面内存代价约 10-13%,Android 3-5%(选择性开启)。
  • 导航全流程:browser 进程的 UI 线程判定「URL 还是搜索词」→ 网络侧 DNS/TLS 取响应 → Content-Type/SafeBrowsing/CORB 检查 → 并行预启动的 renderer 通过 IPC 接管(commit)→ 地址栏、会话历史更新 → onload 后 spinner 停止。
  • 导航交接:再导航须先问旧 renderer 的 beforeunload;跨站导航时新旧 renderer 并存(旧页跑 unload、新页同时构建);Service Worker 可作为「应用层网络代理」介入导航,Navigation Preload 让 SW 启动与网络请求并行。

本叶地图

  • 入门 —— 多进程全景速览:进程分工、三方权衡、导航七步、站点隔离一句话
  • 进程、线程与 IPC —— CPU vs GPU、进程 vs 线程、私有内存与 IPC、程序如何被 OS 执行
  • 多进程架构 —— 各进程职责表、单进程 vs 多进程、稳定/安全/内存三方权衡、Servicification
  • 各进程内的线程 —— browser 的 UI/network/storage 线程、renderer 的 main/compositor/raster/worker、Viz 的 display compositor
  • 站点隔离 —— site vs origin、OOPIF、Spectre 背景、document.domain、内存代价与铺开时间线
  • 一次导航的全流程 —— 输入判定 → 请求 → 响应检查 → 预启动 renderer → commit → 加载完成
  • 导航交接与复用 —— beforeunload 确认、跨站双 renderer 并存、Service Worker 介入、Navigation Preload
  • 参考 —— 进程职责/线程分工/导航步骤/站点隔离四张速查表 + 权威链接

文档地址

幻灯片地址

浏览器架构与进程模型

测试题

浏览器架构与进程模型 测试题