34.输入一个 URL 到渲染
一、题目描述;输入 URL 到渲染的完整流程
输入一个 URL
到渲染,自能讲多详细讲多详细。过程中打断问了 http
和 https
的区别,DNS
以及层层查找做了什么事情,重排重绘有什么区别,举例子说说什么属性改变是重排什么改变是重绘。
参考答案
DETAILS
1、URL
解析
- 用户输入:在地址栏输入 https://www.example.com/index.html。
解析协议和域名:浏览器解析协议(HTTP/HTTPS)、域名(www.example.com)和路径(/index.html)。
2、DNS
查询(域名解析)
浏览器缓存:首先检查浏览器缓存是否有该域名的
IP
记录。系统缓存:若无,查询操作系统(如本地
hosts
文件)和路由器缓存。ISP
DNS
缓存:向互联网服务提供商(ISP)
的DNS
服务器发起查询。递归查询:若
ISP
无缓存,从根域名服务器开始逐级查询:根域名服务器:返回
.com
顶级域名服务器的地址。顶级域名服务器:返回
example.com
的权威域名服务器地址。权威域名服务器:返回
www.example.com
的IP
地址。结果缓存:最终
IP
存入各级缓存(按TTL
过期时间)。
3、建立TCP
连接
浏览器向服务器发起
TCP
连接请求,三次握手建立连接。三次握手:浏览器发送一个带
SYN
标志的TCP
包给服务器,服务器收到后回传一个带有SYN/ACK
标志的TCP
包以示传达确认信息,浏览器再回传一个带ACK
标志的TCP
包,代表握手结束。
4、发出 HTTP
请求
浏览器向服务器发送 HTTP 请求,请求所需的 HTML 文件。
5、服务器处理请求
Web
服务器(如Nginx
):根据路径找到对应的静态文件或转发给应用服务器(如Node.js
)。应用服务器:处理动态请求(如查询数据库),生成
HTML
响应。
6、接收 HTTP
响应
- 响应报文:包含状态码(
200 OK
)、响应头(Content-Type、Cache-Control
)、响应体(HTML
内容)。
7、浏览器解析与渲染
- 构建
DOM
树
HTML
解析:将HTML
字符串转换为DOM
树。词法分析:将字符流转换为标签(
Tokens
)。语法分析:根据标签嵌套关系生成
DOM
节点树。
- 构建 CSSOM 树
解析 CSS:将 CSS 规则转换为 CSSOM 树(样式表结构)。
阻塞渲染:CSS 解析会阻塞页面渲染,直到 CSSOM 构建完成。
- 生成渲染树(Render Tree)
- 合并 DOM 和 CSSOM:仅包含可见节点(如排除 display: none 的元素)。
- 布局(Layout/Reflow)
- 计算几何信息:确定每个节点在屏幕上的位置和大小(如宽度、高度、坐标)。
- 绘制(Painting)
- 填充像素:将渲染树转换为屏幕上的实际像素(如颜色、边框、阴影)。
8、重排(Reflow)与重绘(Repaint)
二、题目描述:重排和重绘有什么区别?举例说明哪些属性会触发?
参考答案
DETAILS
- 重排(Reflow):重新计算元素的几何属性,导致布局变化。触发条件:修改影响布局的属性
width, height, margin, padding, left, top, font-size
- 重绘(Repaint):仅更新元素的绘制属性,不改变布局。触发条件:修改不影响布局的样式
color, background-color, visibility, border-radius
- 性能影响:重排比重绘代价更高,可能触发整个渲染树的重新计算。