详解:页面从URL请求到加载完成的整个过程-灵析社区

JACKY

请求网页的整个渲染过程可以分为多个阶段,从用户在浏览器中输入网址到页面最终呈现在屏幕上,大致流程如下:

  1. 用户输入网址:用户在浏览器地址栏输入网址(Uniform Resource Locator, URL),按下回车键发起请求。
  2. 域名解析(DNS 查询):浏览器首先需要将输入的域名转换为对应的IP地址。这个过程通过DNS查询来完成,浏览器向DNS服务器发送查询请求,获取目标服务器的IP地址。
  3. 建立TCP连接:获取到服务器IP地址后,浏览器通过TCP/IP协议与服务器建立连接。这通常涉及到TCP的三次握手过程,目的是为了建立一个稳定可靠的传输通道。
  4. 发送HTTP请求:连接建立后,浏览器构造HTTP请求报文,其中包括请求行(方法、URL、协议版本)、请求头(如User-Agent、Accept-Language、Cookie等)、以及可能存在的请求体(比如POST请求中的数据)。
  5. 服务器处理请求:服务器接收到请求后,根据请求的URL和HTTP方法执行相应的操作,如读取文件、执行脚本或数据库查询等,并准备HTTP响应。
  6. 返回HTTP响应:服务器将生成的响应报文(包括状态码、响应头、响应体)通过TCP连接发送给浏览器。
  7. 浏览器接收响应:浏览器接收到响应报文后,开始解析响应内容。如果是HTML文件,就进入页面渲染阶段。
  8. 解析HTML:浏览器首先解析HTML内容,构建Document Object Model (DOM) 树,这是一个内部表示形式,用于表示文档的所有元素和它们之间的层级关系。
  9. 解析CSS:同时,浏览器解析CSS样式表,构建CSS Object Model (CSSOM) 树,记录样式信息。
  10. 构建渲染树(Render Tree):将DOM树和CSSOM树结合,构建渲染树。渲染树包含了所有可视节点及其计算后的样式信息。
  11. 布局(Layout / Reflow):浏览器根据渲染树计算每个节点在屏幕上的确切位置和大小,这个阶段也被称为“布局”或“重排”。
  12. 绘制(Painting):有了布局信息后,浏览器按照从后往前的顺序绘制各节点,包括文本、颜色、图像等,这个过程叫做“合成”或“绘制”。
  13. 重绘(Repaint)和重排(Reflow):如果在渲染过程中有样式变化导致布局改变,浏览器可能需要重新进行布局和绘制工作。
  14. 增量渲染与交互反馈:在某些情况下,浏览器会采用增量渲染的方式,优先展示可见内容,随后逐步加载和渲染剩余部分。同时,对于用户的交互操作(滚动、点击等),浏览器会实时调整渲染树和布局,给出及时的反馈。
  15. 资源加载:浏览器并行加载页面所需的其他资源,如图片、字体、JavaScript文件等。JavaScript可能会修改DOM或CSSOM,进而影响渲染结果,因此在执行JavaScript的同时,浏览器会监控可能引发的变化并适时重排和重绘。
  16. 页面加载完毕:当主文档加载完毕,所有资源加载和渲染工作完成后,浏览器呈现完整页面给用户。

以上整个过程涉及到复杂的调度算法、缓存机制、并发处理和异步加载等技术手段,确保页面高效、准确地渲染和交互。



阅读量:19

点赞量:0

收藏量:1