浏览器多进程架构
浏览器的 Browser、Renderer、GPU、Network、Plugin 进程及其职责
问题
现代浏览器采用多进程架构,主要包含哪些进程?各自负责什么?
解答
架构概览
┌─────────────────────────────────────────────────────────┐
│ Browser Process │
│ (UI、地址栏、书签、前进后退、网络请求、文件访问) │
└─────────────────────────────────────────────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐
│ Renderer │ │ Renderer │ │ GPU │ │ Network │
│ Process │ │ Process │ │ Process │ │ Process │
│ (Tab 1) │ │ (Tab 2) │ │ │ │ │
└───────────┘ └───────────┘ └───────────┘ └───────────┘
1. Browser Process(浏览器主进程)
负责浏览器的”外壳”功能:
// Browser Process 管理的内容
const browserProcess = {
ui: '地址栏、书签栏、前进后退按钮',
tabManagement: '创建、销毁渲染进程',
storage: 'Cookie、LocalStorage、IndexedDB',
permissions: '摄像头、麦克风、通知权限',
download: '文件下载管理'
};
2. Renderer Process(渲染进程)
每个 Tab 通常对应一个独立的渲染进程:
// Renderer Process 的工作
const rendererProcess = {
parsing: 'HTML/CSS 解析',
javascript: 'V8 引擎执行 JS',
layout: '布局计算',
paint: '绘制',
compositing: '合成图层'
};
// 进程隔离示例:一个 Tab 崩溃不影响其他 Tab
// Tab A: renderer-process-1 (崩溃)
// Tab B: renderer-process-2 (正常运行)
// Tab C: renderer-process-3 (正常运行)
站点隔离(Site Isolation):
// 同一 Tab 内的跨站 iframe 也会使用独立进程
// 主页面: https://example.com -> renderer-process-1
// iframe: https://ads.com -> renderer-process-2
3. GPU Process(GPU 进程)
处理所有 GPU 任务:
// GPU Process 负责的内容
const gpuProcess = {
'3d': 'WebGL、CSS 3D 变换',
'2d': 'Canvas 2D 硬件加速',
video: '视频解码',
compositing: '图层合成',
ui: '浏览器 UI 绘制'
};
// 为什么独立成进程?
// 1. GPU 操作可能导致系统挂起,隔离后不影响浏览器
// 2. 安全沙箱隔离
4. Network Process(网络进程)
处理所有网络请求:
// Network Process 的职责
const networkProcess = {
http: 'HTTP/HTTPS 请求',
websocket: 'WebSocket 连接',
cache: 'HTTP 缓存管理',
dns: 'DNS 解析',
ssl: 'SSL/TLS 握手'
};
// 独立进程的好处
// 1. 网络请求不阻塞 UI
// 2. 多个 Tab 共享网络连接
// 3. 统一的缓存管理
5. Plugin Process(插件进程)
运行浏览器插件(如 Flash,已废弃):
// Plugin Process(历史遗留)
const pluginProcess = {
flash: 'Adobe Flash(已废弃)',
pdf: 'PDF 查看器',
// 现代浏览器中,扩展运行在独立的 Extension Process
};
进程间通信(IPC)
// 进程间通过 IPC 通信
// 示例:用户输入 URL 到页面显示
// 1. Browser Process 接收用户输入
// 2. Browser Process 通知 Network Process 发起请求
// 3. Network Process 返回数据给 Browser Process
// 4. Browser Process 将数据发送给 Renderer Process
// 5. Renderer Process 解析渲染,通知 GPU Process 绘制
// 6. GPU Process 完成绘制,显示到屏幕
Chrome 任务管理器查看
打开 Chrome 任务管理器(Shift + Esc)可以看到所有进程:
进程类型 内存 CPU
─────────────────────────────
Browser 150 MB 2%
GPU Process 100 MB 5%
Network Service 30 MB 1%
Tab: Google 80 MB 3%
Tab: GitHub 120 MB 2%
Extension: xxx 20 MB 0%
关键点
- Browser Process:管理 UI、Tab、权限、存储,是主控进程
- Renderer Process:每个 Tab 独立进程,负责页面渲染和 JS 执行
- GPU Process:统一处理 GPU 任务,包括 WebGL、视频解码、图层合成
- Network Process:独立处理网络请求,多 Tab 共享
- 进程隔离:一个 Tab 崩溃不影响其他 Tab,提高稳定性和安全性
目录