2022-04-03 20:59:48
深入了解现代网络浏览器(译)Part 1
基础知识
关于CPU和GPU
通常,应用程序使用操作系统提供的机制在CPU和GPU上运行。
在进程和线程上执行程序
一个进程可以要求操作系统启动另一个进程运行不同的任务,此时操作系统将为新的进程分配一块新的内存(与前者分配的内存不是同一部分)。如果两个进程需要通信,则可以使用Inter Process Communication(IPC)进行进程间通信。许多应用程序都设计为这种方式工作,因此,如果工作进程没有响应,可以重新启动它,而无需停止正在运行应用程序其他部分的进程。
浏览器架构
现代网络浏览器可以使用进程和线程构建为复杂的系统。浏览器可以是一个具有许多不同线程的进程,也可以是具有几个通过IPC进行通信的多个线程的进程。

顶部是浏览器进程,负责协调应用程序的不同部分。对于渲染器进程,将创建多个进程并将其分配给每个选项卡。直到最近,Chrome浏览器才尽可能地给每个标签页一个进程,现在它尝试为每个网站(包括iframe)赋予自己的进程。
每一个进程的作用

还有更多的进程,例如扩展进程和实用程序进程。在Chrome浏览器中,可以通过任务管理器查看正在运行的进程数量以及它们正在使用的CPU和内存资源。
Chrome中多进程架构的好处
Chrome使用多个渲染进程,每个选项卡可以有自己的渲染进程。这种架构的好处之一是,当一个选项卡没有响应时,可以关闭该选项卡并继续运行其他选项卡,而不会影响整个浏览器的稳定性。如果所有的选项卡都在一个进程上运行,则当一个选项卡没有响应时,所有选项卡都将无法响应。
将浏览器的工作分为多个进程的另一个好处是安全性和沙箱处理。由于操作系统提供了一种限制进程特权的方法,因此浏览器可以在某些进程中限制部分功能。例如,Chrome浏览器限制了渲染进程处理任意用户输入和文件访问的权限。
然而,由于每个进程都有自己的私有内存空间,因此它们通常包含通用基础结构的副本(例如V8,这是Chrome的JavaScript引擎)。这意味着更多的内存使用情况,因为无法共享这些资源。为了节省内存,Chrome对可启动的进程数量进行了限制。这个限制取决于设备拥有的内存和CPU能力,但是当Chrome达到该限制时,它将开始在一个进程中从同一个站点运行多个选项卡。
节省更多内存 - Chrome中的服务化
Chrome正在进行架构更改,以将浏览器程序的每个部分作为一项服务运行,从而可以轻松拆分为不同的进程或聚合为一个进程。当Chrome在功能强大的硬件上运行时,它可以将每个服务拆分为不同的进程以提高稳定性;但是如果在资源受限的设备上,Chrome会将服务整合到一个进程中以节省内存。
每帧渲染进程 - 站点隔离
站点隔离是Chrome最近引入的功能,可为每个跨站点iframe运行单独的渲染进程。在过去,每个选项卡一个渲染进程,允许跨站点iframe在单个渲染进程中运行,并在不同站点之间共享内存空间。然而,这存在安全风险,因为即使相同来源策略是web的核心安全模型,也无法完全防止一个站点未经同意访问其他站点的数据。进程隔离是分离站点的最有效方法。
从Chrome 67开始,默认情况下启用站点隔离,因此选项卡中的每个跨站点iframe都会获得一个单独的渲染进程。启用站点隔离是一项多年的工程,因为它不仅涉及分配不同的渲染进程,还从根本上改变了iframe彼此交流的方式。例如,在页面上打开具有在不同进程上运行的iframe的开发者工具(devtools),意味着devtools必须实施幕后工作才能使其无缝显示。即使运行简单的Ctrl + F在页面中查找单词,也意味着跨不同的渲染进程进行搜索。