浏览器的渲染原理之Chrome架构 --- 2020-09-22

172 阅读3分钟

前期了解

  1. 了解浏览器原理的原因: 设计高性能的Web应用,优化现有的Web应用。
  2. 选取Chrome浏览器的原因: Chrome浏览器是基于Chromium二次开发而来,并且是目前世界上使用率最高的浏览器。
  3. 浏览器中包括: 网络进程,页面渲染过程,JavaScript执行流程,Web安全等。
  4. Chrome任务管理器。

并行处理与串行处理

  1. 并行处理:同一时刻同时执行多个任务。
  2. 串行处理:一个任务接着一个任务执行。

线程与进程

  1. 线程是不能单独存在的,必须由进程来启动和管理
  2. 进程:一个应用程序的运行实例就是进程,也就是操作系统开辟的一块内存,这个环境就是进程。
  3. 进程包括:代码,运行中的数据,执行任务的主线程
  4. 进行与线程关系的特点:
  • 进程中任一线程出错,这个进程就崩溃,其他线程的执行结果也么得了。
  • 线程之间可以共享包含他们的进程中的数据。
  • 当一个进程结束后,操作系统会回收进程所占用的内存(线程造成的内存泄漏,也会被回收)。
  • 进程之间的内容相互隔离,互不干扰。 如果想让不同的进程之间通信,需要使用IPC机制

单进程浏览器(一个进程,多个线程)

  • 单进程浏览器指浏览器的所有功能都运行在同一个进程中。 单线程浏览器.PNG
  • 缺点
  1. 不稳定:插件会导致浏览器崩溃;JS代码会影响渲染引擎模块,从而影响浏览器
  2. 不流畅:页面线程的内容过多,同一时刻只能执行一个模板,内存泄漏也会造成内存的占用率过高,浏览器变得越来越慢。
  3. 不安全:插件采用C/C++编写,可以获取到操作系统的任一资源;页面脚本也可以通过浏览器的漏洞获取权限。

早期的多进程架构浏览器

早期的多进程浏览器.PNG

  1. 解决不稳定的问题:多个进程,相互之间互不影响。
  2. 解决不流畅的问题:对于内存泄漏:关闭页面,内存回收;JS只影响当前页面,其他脚本运行在自己的渲染进程中。
  3. 解决不安全的问题:安全沙箱

目前的多进程架构浏览器

现在的多进程浏览器.PNG

  • 一个页面,浏览器任务管理器中,至少是个进程:渲染进程,网络进程,浏览器主进程,GPU进程(实际可能往往多余这些)
  1. 浏览器进程:主要负责页面显示,用户交互,子进程管理,存储功能。
  2. 渲染进程:将HTML,CSS,JS转换为用户可以与之交互的网页,运行在沙箱之下吗,排版引擎和Blnk和JS引擎V8都运行在这个进程中。
  3. GPU进程:实现3D CSS效果,Chrome的UI界面都采用GPU。
  4. 网络进程:负责页面的网络资源加载。
  5. 插件进程:负责插件的运行。
  • 缺点: 1.更高的资源占用
  1. 更复杂的体系架构

未来的Chrome架构

主要采用面向服务的架构(SOA)的思想来设计Chrome架构。 原来的各种模块会被重构独立的服务,每个服务都可以在独立的进程中运行,访问服务必须使用定义好的接口,通过IPC来通信,从而构建一个更内聚,松耦合,易于维护和扩展的系统。

补充:

  1. 如果几个页面符合同一站点,将会被分配到一个渲染进程中。
  2. 如果页面中有Iframe,将会运行在独立的进程中。
  3. 网络进程,浏览器主进程,渲染进程,GPU进程是必须的,但还有很多进程比如:扩展进程,iframe进程,压缩图片进程等。