这是我参与8月更文挑战的第12天,活动详情查看:8月更文挑战
现代主流浏览器采用的是多进程架构,正是多进程架构保证浏览器可以稳定、流畅且安全的运行,让用户可以拥有一个良好的浏览器网上冲浪的良好体验,接下来让我们看一看浏览器多进程架的构神秘面纱
浏览器有那些进程
可以在浏览器中查看浏览器包含哪些进程
点击 Chrome 浏览器右上角的“选项”菜单,选择“更多工具”子菜单,点击“任务管理器”,这将打开 Chrome 的任务管理器的窗口,如下图
从图中可以看出,Chrome 浏览器包括:1 个浏览器(Browser)主进程、1 个 GPU 进程、1 个网络(NetWork)进程、多个渲染进程和多个插件进程
浏览器进程:主要负责界面显示、用户交互、子进程管理,同时提供存储等功能,包含导航栏、书签管理、浏览器记录、前进后退按钮等
渲染进程:核心任务是将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JavaScript 引擎 V8 都是运行在该进程中,默认情况下,Chrome 会为每个 Tab 标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下
GPU 进程:其实,Chrome 刚开始发布的时候是没有 GPU 进程的。而 GPU 的使用初衷是为了实现 3D CSS 的效果,只是随后网页、Chrome 的 UI 界面都选择采用 GPU 来绘制,这使得 GPU 成为浏览器普遍的需求。最后,Chrome 在其多进程架构上也引入了 GPU 进程
网络进程:主要负责页面的网络资源加载
插件进程:主要是负责插件的运行,因插件易崩溃,所以需要通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响
打开一个页面,存在几个进程
当使用浏览器仅仅打开一个页面时,存在几个进程?
通过上述的多进程架构,可以得到至少会有4个进程,因为打开 1 个页面至少需要 1 个网络进程、1 个浏览器进程、1 个 GPU 进程以及 1 个渲染进程,共 4 个;如果打开的页面有运行插件的话,还需要再加上 1 个插件进程。
若是此时再打开一个页面,那么页面会存在多少进程呢?
在回答这个问题之前,需要考虑同站(same-site)的影响因素,在浏览器打开新Tab页时,若是同站的页面会使用一个渲染进程,这样可以很好节省进程数量、提升性能。若不是同站,每个页面都是一个独立存在的渲染进程
因为回答此问题需要基于是否同站的因素下考虑
若是同站,那么渲染进程数量保持一致
若非同站,会在原有的渲染进程数量上增加一个渲染进程