浏览器中主要的进程
- 主进程(管理子进程,和系统交互)
- 网络进程
- GPU进程(与GPU交互)
- 渲染进程(沙盒,不直接与系统交互,需要通过主进程中转)
- 插件进程
从用户输入到页面展示的整个过程的主要阶段
进程间通过IPC通信
- 用户输入
- 主进程处理用户输入为完整的url,提交给网络进程
- 网络进程发起请求(域名的话需要先请求DNS获取ip),获得响应头、响应体
- 主进程读取网络进程的响应头(响应码为:301、302则使用location重复步骤3),返回了html(content-type: text/html),创建渲染进程,完成后向渲染进程发送“提交文档”
- 渲染进程接收到“提交文档”消息,与网络进程建立通道,拉取响应体,向主进程发送“确认提交文档”
- 主进程执行导航结束的相关操作(删除上个页面的数据,页面空白、更新历史栈,停止转圈)
- 渲染进程创建主线程解析html,创建预解析线程解析html中的请求;(因为响应体是字节流,拉取一部分解析一部分)
- 构建dom
- 构建cssom
- 生成布局树
- 生成层树
- 生成绘制指令列表
- 合成线程将层分块(图块有优先级,离视口越近优先级越高),传给合成线程维护的栅格化线程池
- 栅格化线程处理图块需要GPU参与,通过GPU进程与GPU通信,在GPU生成位图并保存在GPU内存中,主要图块完成后给主进程发送“绘制”指令
- 主进程收到“绘制”指令,绘制页面并保存在内存中,第一次上传一个低分辨率(分辨率低一半,纹理降低四分之三)的图,避免白屏太久。
- 上传到显示器的后缓存区,前后缓存区交替,60HZ的话,1s最多可以交替60次。
导航阶段:2 -> 6
渲染阶段:7 -> 14