# 浏览器内核
在浏览器中,有一个最重要的模块,就是浏览器内核,它用于将页面转变为可视化的图像结果,通常也被成为渲染引擎
# 内核分层
浏览器内核有许多功能模块,主要分为三层
- 第一层隶属于渲染引擎,包含:HTML 解释器 (解析 HTML 为 DOM 树)、CSS 解释器 (解析 CSS 为 CSSOM 树)、布局 (标记 DOM 元素位置信息) 和 JavaScript 引擎 (解析并执行 js)
- 第二层是封装了操作系统的能力,向第一层提供接口,包含网络、存储、2D/3D 图形、音频和视频和图片解码器等
- 第三层是操作系统的一些 api 支持,例如多线程和文件等
![浏览器解析过程]()
# 网页的层次结构
- 根层,跟层对应着整个网页文档对象
- 第一层,如 video 等元素,因为 video 元素用于播放视频,为它创建一个新的层可以更有效地处理视频解码器和浏览器之间的交互和渲染
- 第二层,如 3D 变换的元素
- 第三层,如 2D 绘图的 canvas 画布
- 第四层,如 3D 绘图的 canvas 画布
# webkit 架构

- 其中虚线部分在不同浏览器中的实现是不同的
![chromium架构模型]()
# 多进程模型
多进程模型在不可避免地带来一些问题和复杂性的同时,也带来了更多的优势,例如:
- 避免因单个页面的不响应或者崩溃而影响到整个浏览器的稳定性
- 当第三方插件崩溃时,不会影响页面或者浏览器的稳定性
- 方便了安全模型的实施,也就是沙箱模型是基于多进程架构的
# 浏览器进程
- Browser 进程,又称浏览器主进程,负责浏览器界面的显示和各个页面的管理,是其他类型进程的祖先,有且只有一个
- Renderer 进程,网页的渲染过程中,负责页面的渲染工作,Renderer 进程的数量和用户打开的网页的数量并不一致,在沙箱模型启动的情况下,该进程可能会发生一些变化
- NPAPI 插件进程,其创建的基本原则是:每种类型的插件只会被创建一次,当且仅当使用时才被创建
- GPU 进程,最多只有一个,当且仅当 CPU 硬件加速打开时才会被创建,主要用于对 3D 图形加速调用的实现
- Pepper 插件进程,为 pepper 插件创建的进程
- 其它类型的进程
# 进程模型特征
- Browser 进程和页面的渲染是分开的,保证了页面的渲染导致的崩溃不会导致浏览器主界面的崩溃
- 每个网页是独立的进程,保证了页面之间相互不影响
- 插件进程也是独立的,插件本身的问题不会影响浏览器主界面和网页
- GPU 硬件加速进程也是独立的
# 多线程模型
每个进程内部,都有很多的线程,主要目的就是为了保持用户界面的高响应度,保证 UI 线程 (Browser 进程中的主线程) 不会被任何其他费时的操作阻碍从而影响了对用户操作的响应,例如文件读写、网络请求等


