当前位置: 首页 > article >正文

详解从输入url到页面渲染

当你在浏览器中输入一个 URL 并按下回车键,浏览器会经历一系列步骤来加载并渲染页面。这些步骤包括 DNS 解析、缓存处理、建立连接、发送请求、接收响应、解析 HTML、构建 DOM 树和 CSSOM 树、执行 JavaScript、布局和绘制等。以下是这些步骤的详细解释,以及面试中常见的问题和细节。

1. 输入 URL 并按下回车

当你在浏览器中输入 URL 并按下回车键时,浏览器会开始处理这个请求。

2. DNS 解析

浏览器首先需要将域名解析为 IP 地址。这个过程称为 DNS 解析。

  • DNS 解析过程

    1. 浏览器缓存:浏览器会首先检查自己的 DNS 缓存,看看是否有对应的 IP 地址。
    2. 操作系统缓存:如果浏览器缓存中没有找到,浏览器会向操作系统查询 DNS 缓存。
    3. 路由器缓存:如果操作系统缓存中没有找到,操作系统会向路由器查询 DNS 缓存。
    4. ISP 缓存:如果路由器缓存中没有找到,路由器会向 ISP 的 DNS 服务器查询。
    5. 递归查询:如果 ISP 的 DNS 服务器中没有找到,DNS 服务器会进行递归查询,直到找到对应的 IP 地址。
  • 面试常见问题

    • 什么是 DNS 解析?
    • DNS 解析的过程是怎样的?
    • DNS 缓存的层级有哪些?

3. 检查缓存

在发送请求之前,浏览器会检查本地缓存(如 HTTP 缓存)中是否有对应的资源。如果有,并且缓存未过期,浏览器会直接从缓存中读取资源,而不需要发送请求。

  • 缓存机制

    • 强缓存:浏览器直接从缓存中读取资源,不会向服务器发送请求。常见的 HTTP 头部字段有 Expires 和 Cache-Control
    • 协商缓存:浏览器向服务器发送请求,服务器根据请求头部字段判断资源是否更新。如果资源未更新,服务器返回 304 状态码,浏览器从缓存中读取资源。常见的 HTTP 头部字段有 Last-Modified 和 ETag
  • 面试常见问题

    • 什么是强缓存和协商缓存?
    • 强缓存和协商缓存的区别是什么?
    • 常见的 HTTP 缓存头部字段有哪些?

4. 建立连接

如果缓存中没有找到资源,浏览器会与服务器建立连接。这个过程包括以下步骤:

  • TCP 三次握手

    1. 客户端发送 SYN 包到服务器,表示请求建立连接。
    2. 服务器收到 SYN 包后,回复 SYN-ACK 包,表示同意建立连接。
    3. 客户端收到 SYN-ACK 包后,回复 ACK 包,表示确认建立连接。
  • TLS 握手(如果使用 HTTPS):

    1. 客户端发送 ClientHello 消息,包含支持的加密算法等信息。
    2. 服务器回复 ServerHello 消息,选择加密算法,并发送服务器证书。
    3. 客户端验证服务器证书,并生成会话密钥,发送给服务器。
    4. 服务器使用会话密钥加密通信。
  • 面试常见问题

    • 什么是 TCP 三次握手?
    • TCP 三次握手的过程是怎样的?
    • 什么是 TLS 握手?
    • TLS 握手的过程是怎样的?

5. 发送 HTTP 请求

建立连接后,浏览器会向服务器发送 HTTP 请求,包含请求方法(如 GET、POST)、请求头部和请求体等信息。

  • 面试常见问题
    • 常见的 HTTP 请求方法有哪些?
    • HTTP 请求头部字段有哪些?
    • GET 和 POST 请求的区别是什么?

6. 服务器处理请求并返回响应

服务器接收到请求后,会处理请求并返回 HTTP 响应,包含状态码、响应头部和响应体等信息。

  • 面试常见问题
    • 常见的 HTTP 状态码有哪些?
    • HTTP 响应头部字段有哪些?
    • 什么是 HTTP/2?它与 HTTP/1.1 的区别是什么?

7. 浏览器解析 HTML

浏览器接收到响应后,会开始解析 HTML 文档,并构建 DOM 树。

  • DOM 树构建

    • 浏览器从上到下解析 HTML 文档,遇到标签时创建对应的 DOM 节点,并按照层级关系构建 DOM 树。
  • 面试常见问题

    • 什么是 DOM?
    • DOM 树的构建过程是怎样的?

8. 解析 CSS

在解析 HTML 的过程中,浏览器会遇到 CSS 文件或内联样式,并开始解析 CSS,构建 CSSOM 树。

  • CSSOM 树构建

    • 浏览器解析 CSS 规则,创建对应的节点,并按照层级关系构建 CSSOM 树。
  • 面试常见问题

    • 什么是 CSSOM?
    • CSSOM 树的构建过程是怎样的?

9. 解析 JavaScript

在解析 HTML 的过程中,浏览器会遇到 JavaScript 文件或内联脚本,并开始解析和执行 JavaScript 代码。

  • JavaScript 执行

    • 浏览器会暂停 HTML 解析,直到 JavaScript 代码执行完毕。
    • JavaScript 代码可以操作 DOM 和 CSSOM,修改页面内容和样式。
  • 面试常见问题

    • JavaScript 的执行过程是怎样的?
    • 什么是阻塞渲染?如何避免?

10. 构建渲染树

浏览器将 DOM 树和 CSSOM 树结合,构建渲染树(Render Tree)。

  • 渲染树构建

    • 渲染树包含页面中可见的元素及其样式信息。
    • 不可见的元素(如 display: none)不会包含在渲染树中。
  • 面试常见问题

    • 什么是渲染树?
    • 渲染树的构建过程是怎样的?

11. 布局(Layout)

浏览器根据渲染树计算每个元素的位置和大小,这个过程称为布局(或回流)。

  • 布局过程

    • 从渲染树的根节点开始,递归计算每个节点的位置和大小。
  • 面试常见问题

    • 什么是布局(Layout)?
    • 什么是回流(Reflow)?如何避免?

12. 绘制(Painting)

浏览器根据布局结果,将每个元素绘制到屏幕上,这个过程称为绘制(或重绘)。

  • 绘制过程

    • 浏览器将渲染树中的每个节点转换为屏幕上的实际像素。
  • 面试常见问题

    • 什么是绘制(Painting)?
    • 什么是重绘(Repaint)?如何避免?

总结

浏览器从输入 URL 到渲染出页面的过程涉及多个阶段,每个阶段都有其特定的任务和细节。在面试中,常见的问题包括:

  • DNS 解析的过程和缓存机制。
  • HTTP 缓存的机制和头部字段。
  • TCP 三次握手和 TLS 握手的过程。
  • HTTP 请求和响应的结构和常见方法。
  • DOM 树和 CSSOM 树的构建过程。
  • JavaScript 的执行过程和阻塞渲染。
  • 渲染树的构建、布局和绘制过程。

通过理解这些细节,可以更好地回答面试中的相关问题,并展示对浏览器工作原理的深入理解。


@@@@@@@@@@@@


 

1. 什么是 DNS 解析?

DNS 解析是将域名转换为 IP 地址的过程。浏览器需要通过 DNS 解析来找到服务器的 IP 地址,以便发送请求。

2. DNS 解析的过程是怎样的?

DNS 解析过程

  1. 浏览器缓存:浏览器首先检查自己的 DNS 缓存。
  2. 操作系统缓存:如果浏览器缓存中没有找到,浏览器会向操作系统查询 DNS 缓存。
  3. 路由器缓存:如果操作系统缓存中没有找到,操作系统会向路由器查询 DNS 缓存。
  4. ISP 缓存:如果路由器缓存中没有找到,路由器会向 ISP 的 DNS 服务器查询。
  5. 递归查询:如果 ISP 的 DNS 服务器中没有找到,DNS 服务器会进行递归查询,直到找到对应的 IP 地址。

3. DNS 缓存的层级有哪些?

DNS 缓存的层级

  1. 浏览器缓存
  2. 操作系统缓存
  3. 路由器缓存
  4. ISP 缓存

4. 什么是强缓存和协商缓存?

强缓存:浏览器直接从缓存中读取资源,不会向服务器发送请求。常见的 HTTP 头部字段有 Expires 和 Cache-Control

协商缓存:浏览器向服务器发送请求,服务器根据请求头部字段判断资源是否更新。如果资源未更新,服务器返回 304 状态码,浏览器从缓存中读取资源。常见的 HTTP 头部字段有 Last-Modified 和 ETag

5. 强缓存和协商缓存的区别是什么?

强缓存:浏览器直接从缓存中读取资源,不会向服务器发送请求。

协商缓存:浏览器向服务器发送请求,服务器根据请求头部字段判断资源是否更新。如果资源未更新,服务器返回 304 状态码,浏览器从缓存中读取资源。

6. 常见的 HTTP 缓存头部字段有哪些?

常见的 HTTP 缓存头部字段

  • Expires
  • Cache-Control
  • Last-Modified
  • ETag

7. 什么是 TCP 三次握手?

TCP 三次握手是建立 TCP 连接的过程,包括以下步骤:

  1. 客户端发送 SYN 包到服务器,表示请求建立连接。
  2. 服务器收到 SYN 包后,回复 SYN-ACK 包,表示同意建立连接。
  3. 客户端收到 SYN-ACK 包后,回复 ACK 包,表示确认建立连接。

8. TCP 三次握手的过程是怎样的?

TCP 三次握手的过程

  1. 客户端发送 SYN 包到服务器,表示请求建立连接。
  2. 服务器收到 SYN 包后,回复 SYN-ACK 包,表示同意建立连接。
  3. 客户端收到 SYN-ACK 包后,回复 ACK 包,表示确认建立连接。

9. 什么是 TLS 握手?

TLS 握手是建立安全连接的过程,包括以下步骤:

  1. 客户端发送 ClientHello 消息,包含支持的加密算法等信息。
  2. 服务器回复 ServerHello 消息,选择加密算法,并发送服务器证书。
  3. 客户端验证服务器证书,并生成会话密钥,发送给服务器。
  4. 服务器使用会话密钥加密通信。

10. TLS 握手的过程是怎样的?

TLS 握手的过程

  1. 客户端发送 ClientHello 消息,包含支持的加密算法等信息。
  2. 服务器回复 ServerHello 消息,选择加密算法,并发送服务器证书。
  3. 客户端验证服务器证书,并生成会话密钥,发送给服务器。
  4. 服务器使用会话密钥加密通信。

11. 常见的 HTTP 请求方法有哪些?

常见的 HTTP 请求方法

  • GET
  • POST
  • PUT
  • DELETE
  • HEAD
  • OPTIONS
  • PATCH

12. HTTP 请求头部字段有哪些?

常见的 HTTP 请求头部字段

  • Host
  • User-Agent
  • Accept
  • Content-Type
  • Authorization
  • Cookie
  • Referer

13. GET 和 POST 请求的区别是什么?

GET 请求

  • 用于请求数据。
  • 参数包含在 URL 中。
  • 参数长度有限制。
  • 不安全,参数在 URL 中可见。

POST 请求

  • 用于提交数据。
  • 参数包含在请求体中。
  • 参数长度没有限制。
  • 相对安全,参数在请求体中不可见。

14. 常见的 HTTP 状态码有哪些?

常见的 HTTP 状态码

  • 200 OK:请求成功。
  • 301 Moved Permanently:永久重定向。
  • 302 Found:临时重定向。
  • 304 Not Modified:资源未修改。
  • 400 Bad Request:请求错误。
  • 401 Unauthorized:未授权。
  • 403 Forbidden:禁止访问。
  • 404 Not Found:资源未找到。
  • 500 Internal Server Error:服务器内部错误。

15. HTTP 响应头部字段有哪些?

常见的 HTTP 响应头部字段

  • Content-Type
  • Content-Length
  • Set-Cookie
  • Cache-Control
  • Expires
  • Last-Modified
  • ETag

16. 什么是 HTTP/2?它与 HTTP/1.1 的区别是什么?

HTTP/2 是 HTTP 协议的第二个主要版本,主要改进包括:

  • 多路复用:在一个 TCP 连接上可以发送多个请求和响应。
  • 头部压缩:使用 HPACK 算法压缩头部,减少传输数据量。
  • 服务器推送:服务器可以主动推送资源到客户端。
  • 二进制分帧:将数据分成二进制帧,提高传输效率。

17. 什么是 DOM?

DOM(Document Object Model) 是 HTML 和 XML 文档的编程接口,表示文档的结构。DOM 将文档表示为节点和对象,开发者可以通过编程语言操作这些节点和对象。

18. DOM 树的构建过程是怎样的?

DOM 树的构建过程

  1. 浏览器从上到下解析 HTML 文档。
  2. 遇到标签时,创建对应的 DOM 节点。
  3. 按照层级关系将节点添加到 DOM 树中。

19. 什么是 CSSOM?

CSSOM(CSS Object Model) 是 CSS 的编程接口,表示 CSS 样式表的结构。CSSOM 将样式表表示为节点和对象,开发者可以通过编程语言操作这些节点和对象。

20. CSSOM 树的构建过程是怎样的?

CSSOM 树的构建过程

  1. 浏览器解析 CSS 规则。
  2. 创建对应的节点。
  3. 按照层级关系将节点添加到 CSSOM 树中。

21. JavaScript 的执行过程是怎样的?

JavaScript 的执行过程

  1. 浏览器遇到 <script> 标签时,暂停 HTML 解析。
  2. 解析并执行 JavaScript 代码。
  3. JavaScript 代码可以操作 DOM 和 CSSOM,修改页面内容和样式。
  4. JavaScript 代码执行完毕后,继续解析 HTML。

22. 什么是阻塞渲染?如何避免?

阻塞渲染 是指浏览器在解析 HTML 时遇到 <script> 标签,会暂停 HTML 解析,直到 JavaScript 代码执行完毕。这会导致页面渲染延迟。

避免阻塞渲染的方法

  • 将 <script> 标签放在页面底部,确保 HTML 解析完成后再执行 JavaScript。
  • 使用 async 或 defer 属性加载外部脚本,异步执行 JavaScript。

23. 什么是渲染树?

渲染树(Render Tree) 是浏览器将 DOM 树和 CSSOM 树结合,构建的用于渲染页面的树结构。渲染树包含页面中可见的元素及其样式信息。

24. 渲染树的构建过程是怎样的?

渲染树的构建过程

  1. 浏览器将 DOM 树和 CSSOM 树结合。
  2. 创建渲染树节点,表示页面中可见的元素及其样式信息。
  3. 按照层级关系将节点添加到渲染树中。

25. 什么是布局(Layout)?

布局(Layout) 是浏览器根据渲染树计算每个元素的位置和大小的过程。布局过程也称为回流(Reflow)。

26. 什么是回流(Reflow)?如何避免?

回流(Reflow) 是浏览器重新计算元素的位置和大小的过程。回流会导致页面重新布局,影响性能。

避免回流的方法

  • 尽量减少对 DOM 的操作。
  • 批量修改 DOM,而不是逐个修改。
  • 使用 documentFragment 批量操作 DOM。
  • 使用 position: absolute 或 position: fixed 脱离文档流,减少对其他元素的影响。

27. 什么是绘制(Painting)?

绘制(Painting) 是浏览器根据布局结果,将每个元素绘制到屏幕上的过程。绘制过程也称为重绘(Repaint)。

28. 什么是重绘(Repaint)?如何避免?

重绘(Repaint) 是浏览器重新绘制元素的过程。重绘不会影响布局,但会导致页面重新渲染,影响性能。

避免重绘的方法

  • 尽量减少对样式的修改。
  • 批量修改样式,而不是逐个修改。
  • 使用 class 切换样式,而不是逐个修改样式属性。

http://www.kler.cn/a/454962.html

相关文章:

  • moviepy将图片序列制作成视频并加载字幕 - python 实现
  • docker redis安装
  • js版本之ES6特性简述【Proxy、Reflect、Iterator、Generator】(五)
  • 邮箱手机号脱敏
  • Pinpoint 是一个开源的分布式追踪系统
  • Vue3 Suspense:处理异步渲染过程
  • 抖音短视频矩阵系统:开启短视频创作与营销新篇
  • webrtc-internals调试工具
  • Overleaf中设置表格中的字体为Times New Roman
  • 如何通过 360 驱动大师检查自己电脑上的显卡信息
  • 【速成51单片机】1.已经学过stm32如何快速入门51单片机——软件下载与安装
  • Flutter适配HarmonyOS实践
  • AndroidStudio/IDEA类名前面为什么有数字(书签功能)
  • Kotlin 协程基础知识总结二 —— 启动与取消
  • OpenCV的FAST和goodFeaturesToTrack的區別
  • 工程设计优化问题:改进海鸥算法(Matlab)
  • Figma插件:提高设计工作效率
  • MySQL 构建 1000 万数据太慢?如何快速构建大量模拟数据?
  • 打破视障壁垒,百度文心快码无障碍版本助力视障IT从业者就业无“碍”
  • 理解有放回和无放回抽样 (Python)
  • 小波分析算法
  • 【Leetcode 热题 100】46. 全排列
  • C++ —— 模板类与友元
  • 数字化什么意思?从基础概念到行业应用的全面解读
  • Linux应用软件编程-多任务处理(进程)
  • 代码随想录Day52 101. 孤岛的总面积,102. 沉没孤岛,103. 水流问题,104.建造最大岛屿。