浏览器各进程

1,365 阅读2分钟

浏览器的进程主要有四个:

  • 浏览器的主进程

  • 网络进程

  • 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给浏览器主进程,浏览器生成页面,并显示在屏幕上