Sunday面试指南

从输入 URL 到页面显示,浏览器到底经历了什么?

🧑‍💻 面试官:从输入 URL 到页面显示,浏览器做了哪些事?

🙋‍♂️ 我:先 DNS 解析,再建立 TCP 和 TLS 连接,拿到 HTML 后生成 DOM 和 CSSOM,最后渲染页面。

🧑‍💻 面试官:如果连接已经存在呢?HTTP/3 也走 TCP 吗?

🙋‍♂️ 我:那这些步骤可能会跳过,HTTP/3 使用 QUIC。

🧑‍💻 面试官:再往后看:HTML 没下载完能显示吗?页面已经出现,为什么按钮还可能点不动?

把这道题讲成两条接起来的主线:拿到资源,以及把资源变成能显示、能交互的页面。

面试速答(60 秒版)

浏览器先解析 URL,确定导航目标,再按缓存、已有连接和协议情况获取页面。需要时进行域名解析与连接建立;HTTPS 还涉及安全握手,但不能把每次导航都说成重新走完整 TCP 流程,HTTP/3 也不使用 TCP。

收到 HTML 后,浏览器可以边接收边解析,建立 DOM,并发现样式、脚本和图片等资源。样式计算确定元素的样式,布局确定位置和尺寸,绘制与合成把内容呈现在屏幕上。

脚本可能影响解析和主线程,因此看到页面不等于交互已经顺畅。排查慢页面时,我会分开看网络等待、关键资源和主线程工作,而不是只看一个总加载时间。

导航获取资源后进入解析渲染,页面显示与流畅交互仍是不同阶段

知识点详解:从一次导航,走到第一屏和第一次点击

先说明这次导航有没有真正请求新资源

假设用户首次打开一个 HTTPS 商品页面。浏览器需要确定目标地址,拿到 HTML;如果没有可用缓存或连接,通常还要查询域名并建立相应连接。

但面试里不能把这条首次访问路径当成每次访问的固定步骤。DNS 可能命中缓存,连接可以复用,资源也可能直接来自缓存。页面还可能由 Service Worker 返回内容,或者发生重定向,再去另一个地址。

协议也会改变连接部分。HTTP/1.1、HTTP/2 通常运行在 TCP 上,HTTP/3 使用 QUIC。这里先讲整体路径,TCP、TLS 和缓存的细节应分别展开,不需要在这道题里重新背完所有报文。

HTML 到了一部分,浏览器已经开始干活

浏览器不是等所有资源下载完,才把它们一次性交给渲染器。HTML 数据陆续到达,解析器就可以逐步构建 DOM。资源发现与下载也会和解析交错进行,预加载扫描器还能提前发现一部分资源。

不过,不同资源对这条主线的影响不同。普通经典脚本若没有 async 或 defer,执行时通常会阻塞后续 HTML 解析;样式表一般不直接停止 HTML 解析,但会影响渲染,也可能让依赖样式的脚本等待。

defer 脚本通常等解析完成后按文档顺序执行;async 脚本准备好就执行,不保证相同顺序。这些话讨论的是相应的经典外部脚本,模块脚本有自己的规则,不能混成一张万能时序表。

从 DOM 到像素,中间还有几次转换

DOM 说明页面有什么,CSS 规则说明怎样显示。浏览器先计算样式,再形成用于布局和绘制的信息。

布局 决定元素的位置与尺寸。例如图片后来才拿到尺寸,可能挤动下面的文字;提前声明图片尺寸就能减少这种位移。

绘制 处理文字、颜色、边框等视觉内容,相关结果还会被栅格化成像素;合成 则把相应图层组合起来。这里是一条教学主线,实际浏览器可能增量更新和并行处理,不是每次都完整重建一遍。

display: none 的元素不参与相应布局;visibility: hidden 仍占布局空间。所以“没有看到”不等于“浏览器没有为它计算位置”。

页面出现了,为什么仍然点不动?

假设第一屏已经画出来,但一个大脚本还在主线程上执行长任务。用户的点击处理需要排队,页面就会给人一种“已经加载好了,却卡着”的感觉。

此时继续压缩图片,未必能改善点击延迟。咱们需要用 Network 看请求的等待和下载,用 Performance 看脚本、样式、布局及长任务,再判断该减少首屏资源、拆分工作,还是调整加载顺序。

验证也要区分首次访问与缓存访问,使用适当的网络和 CPU 条件。只在自己的高速电脑上刷新一次,很容易漏掉真实用户遇到的瓶颈。

本题机制参考:MDN:浏览器如何工作。

HTML 分块解析和资源下载交错进行,普通经典脚本可能暂停后续解析

第一屏已显示时,主线程长任务仍可能让点击处理排队

面试官继续追问

DOMContentLoaded 等于图片全部加载完了吗?

不是。它主要标志 HTML 解析完成,并满足相关延后脚本的执行条件,不等待所有图片。load 是另一个事件,但两者都不是用户体验的全部。

CSS 一定阻塞 DOM 构建吗?

一般不直接阻塞 HTML 解析。不过它可能阻塞渲染,并通过等待样式的脚本间接影响解析进度,需要把关系说完整。

浏览器完全是单线程的吗?

不是。JavaScript 主线程上的很多任务串行执行,但网络、部分渲染工作和 Worker 等并不都挤在同一线程。不要把主线程限制扩大成整个浏览器只有一条线程。

面试速记卡

  • 导航:先看缓存、连接复用和协议,不机械重走首次访问流程。
  • 资源加载:HTML 解析、资源发现与下载可能交错。
  • 渲染:样式算外观,布局算几何,绘制与合成呈现内容。
  • 交互:第一屏已出现,主线程仍可能被长任务占用。
  • 诊断:网络和主线程分别测,首次与重复访问分别看。

公司面试真题

真题根据求职者公开面经整理,题意经过概括,非逐字原话或公司官方题库;本文为 Sunday 的独立解析。

  • 百度 · 前端 · 实习(原帖标签)

    从输入网址到页面渲染经历哪些步骤?(题意整理)

    百度教育 前端面经(已oc) ↗
    原帖编辑于 2023-09-15

  • 美团 · 开发(含 AI 项目追问) · 原帖未明确批次

    从输入网址到页面渲染经历哪些步骤?(题意整理)

    美团面经 ↗
    原帖发布于 2025-09-09

  • 小米 · 前端 · 原帖未明确批次

    从输入网址到页面渲染经历哪些步骤?(题意整理)

    小米前端二面 ↗
    原帖编辑于 2024-05-29

  • 阿里巴巴 · 前端 · 原帖未明确批次

    从输入网址到页面渲染经历哪些步骤?(题意整理)

    网易,腾讯,阿里前端面筋 · 阿里钉钉部分 ↗
    历史面经,面试年份未明确;页面编辑于 2025-03-08

  • 腾讯 · 前端(TEG / QQ音乐 / PCG) · 暑期实习

    从输入 URL 到页面展示经历哪些步骤?(题意整理)

    腾讯暑期实习前端面经 + 总结 ↗
    面试记录为 2020 年 3 月;原帖编辑于 2020-04-19

  • 字节跳动 · 后端(番茄小说) · 实习

    一次完整的网络请求经历哪些步骤?(题意整理)

    【字节跳动】番茄小说部门 后端实习 ↗
    面试记录为 2021 年 1 月;原帖发布于 2022-04-29

浏览公司面试真题 →
简历汪永久免费在线制作简历,模板直接套用、导出无水印,永久免费、下载免费,不需要付费解锁任何功能。去写简历