浏览器工作原理与实践(一)(简介)

661 阅读3分钟

简介

  • 早期的浏览器是单进程架构的,不安全,不稳定,不流畅。之后就演变成为了多进程,现在的多进程已经非常丰富了,下图就是目前的多进程架构。(文章全部基于Chrome)

从图中可以看出,最新的浏览器架构包括:1个浏览器主进程、1个GPU进程、1 个网络进程、多个渲染进程和多个插件进程。其中:

  • 浏览器进程: 主要负责界面显示、用户交互、子进程管理,同时提供存储等功能
  • GPU进程:渲染页面,最初设计是为了处理css 3D的;
  • 网络进程:网络资源加载;
  • 渲染进程: 将 HTML、CSS 和 JavaScript 转换为用户可以与之交互的网页,排版引擎 Blink 和 JS引擎V8都是运行在该进程中,默认情况下,Chrome 会为每个 Tab标签创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下。
  • 插件进程

多进程模型给浏览器带来了很多好处,但同样也带来了一些问题: 更高的资源占用 更复杂的体系架构 在未来将是面向服务的架构(ervices Oriented Architecture SOA)下面是 Chrome“面向服务的架构”的进程模型图

Chrome提供灵活的弹性架构,在强大性能设备上会以多进程的方式运行基础服务,但是如果在资源受限的设备上(如下图),Chrome 会将很多服务整合到一个进程中,从而节省内存占用。

  • 通常情况下是一个页面使用一个进程,但是,有一种情况,叫"同一站点(same-site)",具体地讲,我们将“同一站点”定义为根域名(例如,geekbang.org)加上协议(例如,https:// 或者http://),还包含了该根域名下的所有子域名和不同的端口,比如下面这三个: https://time.geekbang.org https://www.geekbang.org https://www.geekbang.org:8080 都是属于同一站点,因为它们的协议都是https,而根域名也都是geekbang.org。你也许了解同源策略,但是同一站点和同源策略还是存在一些不同地方,在这里你需要了解它们不是同一件事就行了。 Chrome的默认策略是,每个标签对应一个渲染进程。但是如果从一个页面打开了新页面,而新页面和当前页面属于同一站点时,那么新页面会复用父页面的渲染进程。官方把这个默认策略叫process-per-site-instance。 直白的讲,就是如果几个页面符合同一站点,那么他们将被分配到一个渲染进程里面去。 所以,这种情况下,一个页面崩溃了,会导致同一站点的页面同时崩溃,因为他们使用了同一个渲染进程。 为什么要让他们跑在一个进程里面呢? 因为在一个渲染进程里面,他们就会共享JS的执行环境,也就是说A页面可以直接在B页面中执行脚本。因为是同一家的站点,所以是有这个需求的。
  • 来源于:极客时间 李兵《浏览器工作原理与实践》
  • 我只是在学习的时候简要记录下重点内容,文章读起来可能比较生硬😂