【前端每天一题】🔥 第 20 题:从输入 URL 到页面渲染全过程

下面是 第 20 题:从输入 URL 到页面渲染全过程

这是前端最最最经典、最全面的高频面试题。

我会用:结构化 + 流程图思维 + 要点总结 + 速记卡片 来讲解。


✅ 第 20 题:从输入 URL 到页面渲染发生了什么?


📘 一、整体流程(面试官希望你说出这些关键步骤)

复制代码
DNS 解析 → 建立 TCP 连接 → 发送 HTTP 请求 → 服务器处理 → 返回 HTTP 响应
→ 浏览器解析响应 → 构建 DOM → 构建 CSSOM → 渲染树 Render Tree
→ Layout 排版 → Paint 绘制 → Composite 合成 → 页面呈现

面试官听到这些就知道你掌握程度不错。

下面详细展开。


📘 二、第一步:URL 解析

用户在地址栏输入 URL:

  • 补全 scheme(如省略 http://)
  • 判断是否是搜索查询(例如输入"abc")

📘 三、第二步:DNS 域名解析

浏览器要将域名解析成 IP 地址。

DNS 查找顺序(从快到慢):

  1. 浏览器缓存
  2. 系统 Hosts
  3. 本地 DNS 服务器缓存
  4. 递归 DNS 查询(. → 顶级域名 → 权威域名)

解析成功后得到服务器实际 IP。


📘 四、第三步:建立 TCP 连接(三次握手)

经典三次握手:

  1. SYN:浏览器 → 服务器
  2. SYN + ACK:服务器 → 浏览器
  3. ACK:浏览器 → 服务器

建立连接后才可以发送数据。

⚠️ HTTPS 多了一步:TLS/SSL 握手

(交换证书、对称加密密钥、验证身份)


📘 五、第四步:发送 HTTP 请求

浏览器发送:

  • 请求行:GET / POST
  • 请求头:cookie、cache-control
  • 请求体(POST 才有)

📘 六、第五步:服务器处理请求

服务器进行:

  • 鉴权(token, cookie)
  • 路由匹配
  • 业务逻辑处理
  • 操作数据库
  • 返回数据(HTML、JSON、静态文件)

📘 七、第六步:浏览器接收响应

服务器返回 HTTP 响应:

  • 状态码(200 / 301 / 302 / 304 / 404 / 500 等)
  • 响应头(cache-control、content-type)
  • 响应体(HTML / CSS / JS / 图片 / json)

如果是 HTML,则进入下一阶段:解析渲染。


📘 七、浏览器渲染阶段(最重要的部分)

浏览器开始解析响应的 HTML。


📌 1. 构建 DOM 树

解析 HTML → 从上到下生成 DOM。

注意:

  • 碰到 <script> 会阻塞 DOM 构建(同步 script)
  • 除非 script 设置 defer / async

📌 2. 构建 CSSOM 树

解析所有 CSS 文件、style 标签、内联样式。

CSSOM 构建也会阻塞渲染,因为 JS 可能依赖样式计算。


📌 3. 合并 DOM + CSSOM -> 渲染树(Render Tree)

Render Tree 只包含:

  • 可见元素
  • 可见部分的样式

例如:

  • display:none 元素不会进入渲染树

📌 4. Layout(重排)

计算各元素:

  • 大小
  • 位置
  • 盒模型

📌 5. Paint(重绘)

绘制颜色、字体、边框、阴影等。


📌 6. Composite(合成)

GPU 将图层进行合成(Compositor)。

使用 transform / opacity 会创建合成层,避免重排 → 提高性能。


📘 八、页面绘制完成,但之后会继续触发渲染

用户滚动、JS 更新 DOM 等都会触发:

  • Reflow(重排)
  • Repaint(重绘)

你上一题已经学过。


📘 九、可能的加分环节:缓存

浏览器缓存可分为:

1. 强缓存(200 from disk/memory)

  • Expires
  • Cache-Control

2. 协商缓存(304 Not Modified)

  • ETag
  • Last-Modified

前端必须掌握缓存策略。


📘 十、最终版 10 秒速记卡片(模板可背)

css 复制代码
输入 URL →
DNS 解析 →
TCP/HTTPS 握手 →
发送 HTTP 请求 →
服务器处理返回 →
浏览器解析 HTML →
构建 DOM →
构建 CSSOM →
合成渲染树 →
Layout →
Paint →
Composite →
页面呈现

加分内容:

  • script 的 async / defer
  • 页面资源缓存
  • HTTP2 多路复用
  • GPU 合成层(transform/opacity)

下一题继续吗?
第 21 题:HTTP 状态码 & 缓存机制(强缓存 vs 协商缓存)

相关推荐
前端一课1 小时前
【前端每天一题】🔥 第 12 题:== 与 === 的区别?为什么 [] == ![] 是 true?
前端·面试
前端一课1 小时前
【前端每天一题】🔥 第 13 题:原型链查找规则是什么?为什么对象能访问到方法?
前端·面试
前端一课1 小时前
【前端每天一题】🔥 第 11 题:this 的指向规则(前端高频必考题)
前端·面试
一 乐1 小时前
餐厅管理智能点餐系统|基于java+ Springboot的餐厅管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
北极糊的狐1 小时前
父组件向子组件传参时,传递数组和对象类型的参数的方法
前端·javascript·vue.js
前端一课1 小时前
【前端每天一题】🔥 第 9 题:防抖(debounce)与节流(throttle)的区别?如何实现?
前端·面试
前端一课2 小时前
【前端每天一题】🔥 第 10 题:浅拷贝 vs 深拷贝?如何手写深拷贝?
前端·面试
前端一课2 小时前
【前端每天一题】🔥 第 8 题:什么是事件委托?它的原理是什么?有哪些优点和常见坑? - 前端高频面试题
前端·面试
前端一课2 小时前
【前端每天一题】🔥第7题 事件冒泡与事件捕获 - 前端高频面试题
前端·面试