Chrome浏览器架构

#积累/浏览器原理

一个页面五个进程

打开一个页面,至少会产生五个进程:

  • 浏览器主进程:负责子进程管理,协调进程间通信;
  • GPU进程:UI界面通过GPU来绘制;
  • 网络进程:负责页面的网络资源加载;
  • 音频进程:负责音频播放;
  • 页面的渲染进程:HTML解析、CSS解析、JavaScript执行,图片解码、渲染出位图,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中。
  • 插件进程,如果有插件,每个插件都运行在单独的进程中。

多进程架构的优点/缺点

  • 由于进程是相互隔离的,一个页面或插件崩溃只会影响当前进程,不会导致浏览器崩溃,浏览器稳定性得到提升;
  • JavaScript是运行在渲染进程的,即使JavaScript阻塞了,影响的也是当前进程,浏览器其他部分的交互可以保持流畅;
  • 渲染进程和插件进程会运行在安全沙箱中,沙箱里面的程序可以运行,但是不能在硬盘上写入任何数据,也不能在敏感位置读取任何数据,这样保证了系统安全。
  • 多进程架构也带来了内存占用高、架构更复杂的问题。

安全沙箱

通过浏览器漏洞进行的攻击是可以入侵到浏览器进程内部的,可以读取和修改浏览器进程内部的任意内容,还可以穿透浏览器,在用户的操作系统上悄悄地安装恶意软件、监听用户键盘输入信息以及读取用户硬盘上的文件内容。

基于上面的安全考虑,渲染进程运行在安全沙箱内,限制其访问或修改操作系统中的数据。因此渲染进程内部涉及到和系统交互的功能都转移到其他进程中去实现了。

  • 网络访问,网络进程负责
  • Cookie数据的读写,浏览器进程负责
  • 缓存文件的读写,浏览器进程负责
  • 用户交互(鼠标、键盘事件等),浏览器进程负责