从导航过程看看浏览器架构



  • 参考文章

    Chrome浏览器的架构

    替代文字

    各个进程的工作

    进程 工作
    Browser 管理地址栏、书签、前进后退按钮;也包括不可见的网络请求和文件访问
    Rendrer 管理所有在一个tab栏中的内容
    Plugin 管理网站使用的插件
    GPU GPU任务的处理独立于其他进程。 它被分为不同的进程,因为GPU处理来自多个应用程序的请求并将它们绘制在同一页面中。

    浏览器UI中各进程负责部分:
    替代文字

    导航后会发生什么?

    从Browser Process开始

    替代文字
    如前面所说,浏览器进程包含了顶部输入栏,书签,前进后退按钮等功能。因此用户输入内容后将首先被浏览器进程处理。

    (1)处理输入

    UI线程首先需要解析,判断输入是一个查询还是一个URL;来决定是发送给搜索引擎还是请求的站点。
    替代文字
    问题:如何判断是查询还是URL?

    (2)开始导航

    点击回车后,UI线程初始化一个网络线程来获取站点内容。如图,tab栏左侧将显示加载动画;同时网络线程将通过适当的协议做一些预备工作,如DNS解析和为请求建立TLS连接。
    替代文字

    (3)读取服务器响应

    当开始接收响应体时,响应体的 Content-Type 头部需要告知数据类型。如果缺失此字段,浏览器可能会通过查看资源来进行MIME嗅探MIME类型
    替代文字
    如果返回的是 HTML 文件,则下一步将数据传递给渲染器进程。但如果它是zip文件或其他文件,则表示它是下载请求,因此需要将数据传递给下载管理器。
    替代文字
    这里也会进行 SafeBrowsing 检查。如果域和响应数据和已知的恶意站点匹配,则网络线程会通知显示警告页面。此外,

    也会进行 Cross Origin Read Blocking (CORB)检查,来确保敏感的跨站点数据不会进入渲染器进程。

    (3)启动渲染进程

    当网络线程确保浏览器可以安全访问请求站点,网络线程会先通知UI线程接收的数据已经准备就绪,然后UI线程会唤起一个渲染进程来渲染页面。
    替代文字
    由于网络请求需要几百毫秒才能收到响应,这里做了一个优化,即在网络线程发送URL请求时,UI线程并行地主动查找或启动渲染器进程。

    (4)提交导航内容到渲染进程

    此时数据和渲染进程都已准备就绪。浏览器进程通过IPC向渲染进程发送渲染页面指令,同时将HTML数据通过流的方式传递给渲染进程。

    同时,tab栏中的浏览历史会被更新。另外, 为了在关闭tab栏或浏览器后能够恢复网页,会话历史会被存储在磁盘中。
    替代文字

    (5)初始加载完成

    当渲染进程“完成”内容加载时,它会通知浏览器进程,此时UI线程停止加载动画。这里的“完成”指的是HTML中列出的资源加载完成,但是客户端JavaScript仍然可以加载额外的资源并渲染新的视图。
    替代文字

    (6)开始渲染页面

    替代文字

    渲染进程负责渲染页面。


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待