渊虹小站

浏览器内部:浏览器进程

进程概述

浏览器的多进程,以chrome为例

  • Browser进程

    • 控制chrome的用户界面。所谓的用户界面,指的是浏览器网页窗口上面的部分,包括:地址栏、书签、向前向后按钮等
    • 负责网络请求、文件访问等不可见的底层服务
    • 负责各页面管理,创建和销毁其他进程
  • 渲染进程

    • 渲染进程负责页面渲染、脚本处理等内容
    • 每个tab有一个自己的独立的渲染进程,这么做的好处是:1、如果某个tab崩溃,不会影响其他tab的正常运行;2、隔离每个tab,避免一些跨tab造成的安全问题
  • 插件进程

    • 负责插件处理
    • 每个插件对应于一个插件进程
  • GPU进程

    • 负责GPU任务(GPU会负责处理来自各个应用的请求,并且在同一个界面上进行绘制)
  • 其他

    • 比如一些工具进程等

可以在chrome的任务管理器中查看各个进程,其中每一行为一个进程,而且可以看到每个进程 CPU和内存的使用情况


进程合作

以在chrome地址栏输入网址为例,说明浏览器各进程之前的合作的:

  • 在chrome地址栏输入网址,Browser进程中的UI线程获取输入内容,然后分辨这个输入是一个地址还是一个查询字符串,chrome的地址栏既可以直接访问网址也可以进行搜索引擎查询。若是一个地址,则说明接下来需要对此网址进行请求;否则表示应该请求对应搜索引擎
  • Browser进程中的UI线程展示网络正在请求的指示器,比如loading图标等;Browser进程network线程对响应网络进行请求处理,包括DNS查询、建立TCP连接等

    • 如果此时network线程收到一个重定向的服务器返回,则告知UI线程进行重定向,展示不同的网址,并对重定向网址进行网络请求
  • network线程收到服务端返回后,首先查看返回内容的Content-Type请求头,以确定返回内容的类型。由于Content-Type请求头可能丢失或错误,所以可能会进行MIME_types 嗅探。根据Content-Type及嗅探结果,确定返回内容的类型后,Browser进程会根据内容类型进行不同的处理。

    • 如果内容是HTML文件,则接下来会会把返回数据交给Render进程进行页面渲染如果内容是zip文件或其他文件等,意味着返回内容是待下载内容,则将数据传递给下载管理器
    • 类型的确定不是等到所有内容都下载完才进行,在收到需要的数据之后便可以进行。下面的几部也都是在接受数据的同时同步进行的。
  • 另外,在接收到返回内容后,也会对内容进行跨域等安全检查。如果确定内容没有问题,并且属于对应请求的网址,则network进程会告知UI进程数据加载结束,UI进程则会寻找一个Render线程来进行页面渲染

    • 为了节省时间,在进行网络请求期间,UI进程会提前确定好后续进行页面渲染的Render线程,当数据加载完毕后,则直接将数据交给之前已经准备好的Render线程
    • 需要注意的是,如果页面被重定向到了一个对于现在域名跨域的域名,则需要另外一个Render进程进行渲染
  • 通过以上步骤,数据在加载中,并且已经有准备好的页面渲染的Render线程,则Browser进程通过IPC将数据发送给Render进程Render进程开始进行网页渲染。
  • Render进程结束渲染,执行完所有onload事件后,通过IPC告知Browser进程Browser进程UI线程展示停止"加载中"的指示,显示加载完成。

参考内容

浏览器内部运行机制

从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理