# 浏览器的架构演变

基本都基于Chrome来讲述。现代浏览器基本都以Chromium为内核开发,所以我们跟进主流,其它的不做讨论。

# 前置知识

可以先回顾和补一下线程和进程的知识,以及他俩的区别。

# 单进程浏览器时代

浏览器的全部功能模块都运行在同一个浏览器进程中。这些模块包含了网络,插件,渲染引擎和页面,js运行环境。

这样的架构导致了不稳定不流畅不安全

# 不稳定

早期浏览器的许多功能都依赖于外部插件来完成,像web视频,web游戏等。然而插件十分不稳定,是一个很容易出问题的模块。因为共用一个进程,所以一个插件的崩溃会引起整个浏览器的崩溃。另外,除了插件之外,一些复杂的javascript代码也可能引起渲染引擎的崩溃,从而引发浏览器的崩溃,可谓牵一发而动全身。

# 不流畅

例如javascript代码中意外的出现了某段无限循环的代码逻辑,每个页面的javascript运行线程都是同一个,这个无限循环的代码导致饿死了其它页面的javascript运行,一直在等待释放,所以导致其它页面出现了假死状态,失去响应,变得卡顿。

# 不安全

浏览器的插件可以获取到操作系统级别的任意资源,可想而知,如果是一个恶意插件,就可以做很多事情了。另外一些页面脚本,可以通过浏览器的漏洞获取系统权限,对电脑做一些恶意的事情。

# 多进程浏览器时代

基于浏览器的单进程时代带来的诸多问题,后面演变出了多进程模式。

早期时代

  • 浏览器主进程,负责进程间通信,下载资源等,可以认为是个总的协调模块。
  • 插件进程
  • 渲染进程,负责解析javascript,渲染页面,合成网页图片,跟前端比较靠近的东西,渲染进程运行在沙盒之中,不能获取到操作系统权限。

后来发展

GPU和网络单独出来成为一个单独的进程模块。

  • 1个浏览器主进程
  • GPU进程
  • 网络进程
  • 多个渲染进程 沙盒隔离
  • 多个插件进程 沙盒隔离

# 未来面向服务的架构

Last Updated: 6/25/2021, 6:35:25 AM