要点1:所涉及游览器进程:游览器进程、渲染进程。
要点2:游览器进程 具有的线程:UI线程、网络线程、存储线程。
导航步骤及各步骤的原理:
1、处理输入。
在导航栏输入内容,由 UI线程 负责,此时 UI线程 识别输入的内容为"搜索查询"或"URL"。
搜索查询:发送到搜索引擎。
URL:请求对应URL网站。
2、开始导航。
UI线程 会发起网络调用以获取网站内容,网络线程 通过相应的协议为该URL 请求查找(例如 DNS)和建立连接(例如 TLS),即 UI线程 与 网络线程 进行了通讯。(网络线程可能会收到服务器的重定向状态码,例如 HTTP 301。在这种情况下,网络线程 与 UI线程 进行通信,告知请求的服务器正在请求重定向,此时将启动另一个 URL 请求。)
3、读取响应结果。
识别到响应是 HTML 文件,网络线程 会检查响应数据是否为来自安全站点的 HTML,确保安全后将数据传递到 渲染进程。
4、查找渲染进程。
完成所有检查后,并且 网络线程 确信浏览器应导航到请求的站点时,网络线程 告知 UI线程 数据准备就绪,UI线程 则找来一个 渲染进程 来对页面进行渲染。(经过优化,UI线程 和 网络线程 会尝试并行查找渲染进程。)
5、提交导航。
一切准备就绪,将 IPC(进程通信) 从 浏览器进程 发送到 渲染进程 以提交导航。当 浏览器进程 听到 渲染进程 中的提交确认,导航即完成,文档加载阶段开始。
本文只对大体流程进行总结,更多有关游览器导航实现原理及更多底层原理请前往 现代浏览器 - 深入理解 | Black Pearl 查阅。