浏览器的进程主要有四个:
-
浏览器的主进程
-
网络进程
-
GPU渲染进程
-
渲染进程
一**、输入url到页面开始解析的过程**
-
浏览器主进程收到地址栏中的用户输入时,首先会判断是搜索内容还是URL。
-
如果是搜索内容,浏览器主进程会使用默认的搜索引擎,合成带搜索内容的URL,交给网络进程。
-
如果是URL,则会根据规则,加上协议,交给网络进程(IPC)。
-
浏览器主进程标签页的图标改为加载状态,执行beforeunload事件。
-
网络进程接收到之后,会进行以下操作:
-
进行缓存查找(Service Worker、memory cache、disk cache)
-
DNS域名解析
-
请求协议是HTTPS,TLS连接 (应用层)
-
准备进行TCP连接 (传输层)
-
加上IP头部(网络层)
-
MAC数据帧(数据链路层)
-
网络进程构建请求头、请求体等信息,并将该域名相关的Cookie等信息加到请求头中(建立连接之后),发送给交换机。
-
交换机给路由器。
-
路由器传到服务器。
-
在网络进程接收到响应头后,便开始解析响应头,并把响应头数据发送给浏览器主进程。
-
浏览器主进程接收到之后,会发送一个'提交导航'(CommitNavigation)的消息给渲染进程。
-
渲染进程接收到'提交导航'消息之后,就开始准备接收响应数据,渲染页面了,它会直接和网络进程建立数据通道,并发送一个'提交文档'的消息给浏览器主进程,然后开始接收数据,解析渲染页面。
-
浏览器主进程就更新页面状态、历史记录、安全状态,卸载之前的文档。
注意:在输入url,并回车时,意味着旧文档即将被卸载,此时可以通过window.beforeunload事件来做一些退出之前的操作,或者是阻止页面的更新(通过e.returnValue)。
二、解析渲染页面过程
渲染进程给浏览器主进程发送'确认提交'的消息时,就开始边下载边解析资源了。解析资源是从接收到content-type字段开始,一旦浏览器判定该资源为HTML,就会为该请求创建或者选择一个渲染进程。
解析渲染页面的过程为:
- 构建DOM树
- 构建CSSOM树
- 布局阶段
- 对布局树进行分层,并生成图层树
- 为每个图层生成绘制列表,交给合成线程
- 合成线程将图层分成图块,并在栅格化线程池中将图块转成位图
- 合成线程发送绘制图块命令DrawQuad给浏览器主进程,浏览器生成页面,并显示在屏幕上