单进程浏览器(已被淘汰):
定义:所有功能模块运行在同一个进程里。包括网络、插件、js运行环境、渲染引擎和页面等。
缺点:
- 不稳定。一个模块的运行出错会导致整个浏览器崩溃。
- 不流畅。js代码运行逻辑过多,耗时较长时会导致线程长时间被占用,其他模块无法执行对应任务,此外页面的内存泄露也会使得进程变慢,造成浏览器越来越卡。
- 不安全。插件模块可以获取到操作系统资源,页面脚本可以利用浏览器漏洞获取系统权限,会造成安全隐患。
多进程浏览器(目前架构)
- 浏览器主进程。负责界面显示、用户交互、子进程管理、提供存储功能。
- 渲染进程。运行在沙箱模式(出于安全考虑)。将html,css和js转换为可交互的页面,排版引擎和js引擎都在该进程中运行。默认情况下,每个tab标签页时一个单独的渲染进程(有例外,后续分析)。
- GPU进程。页面UI和浏览器自身UI都用GPU绘制。
- 网络进程。负责页面的网络加载。
- 插件进程。负责插件的运行,因为插件容易崩溃,所以使用单独的进程来管理。
缺点:
- 更高的资源占用;
- 更复杂的体系架构;
面向服务的架构(未来方向)
各种模块被重构为独立的服务,每个服务在独立的进程中运行,访问服务必须使用定义好的接口,使用IPC来通信,使系统更内聚,松耦合,易于维护和扩展。