浏览器如何工作:面向初学者的浏览器内部指南

发布: (2026年2月2日 GMT+8 02:11)
10 分钟阅读
原文: Dev.to

Source: Dev.to

你输入一个 URL。
你按下 Enter 键。
网页出现。

它感觉瞬间完成——毫不费力。没有什么特别的,对吧?

但在幕后,这一次按键会触发一连串精心协同的事件,涉及网络、解析、布局计算和渲染逻辑——所有这些都在 毫秒(甚至更短) 内完成。

大多数初学者认为浏览器的工作很简单:“它打开网站”。
这并不错误,但远远不完整。

浏览器不仅仅是一个查看器。它是一个系统——几乎是一个 操作系统。它 获取文件,理解 HTML、CSS 等语言,将文本转换为结构化数据,计算布局,最后在屏幕上绘制像素

在本指南中,我们将放慢这一过程。
我们不会深入规范,也不会试图记住各个组件。
相反,我们将通过一个故事——从输入 URL 到看到像素——来进行讲解。

当你按下 Enter 时,浏览器并不会直接跳到绘制页面。
它遵循一个 管道——一系列步骤,每个阶段为下一个阶段准备数据。

到最后,浏览器会让人感觉不再像魔法,而更像是 精心设计的机器,恰如其分地完成它们应有的工作。


什么是浏览器,真的?

在高层次上,浏览器是一个执行四项核心工作的平台:

  1. 提供用户界面(标签页、地址栏、按钮)。
  2. 从网络获取资源
  3. 理解网页语言(HTML、CSS、JavaScript)。
  4. 将这些指令转换为屏幕上的像素

把浏览器想象成一家餐厅:

餐厅类比浏览器类比
菜单和餐桌(你与之交互的部分)UI(地址栏、标签页、按钮)
厨房(处理原材料)网络与渲染引擎
厨师(遵循指令)JavaScript 引擎、布局引擎
成品菜肴(最终上桌的食物)渲染后的页面(像素)

关键要点:
浏览器 不是单一程序;它是多个协同工作的组件的集合,负责将 HTML(及其相关技术)转换为可视化的数据。

Source:

浏览器的主要组成部分

下面列出了现代浏览器内部的主要模块。

1. 用户界面 (UI)

除页面渲染区域之外,你看到的所有内容都属于 UI:地址栏、标签页、刷新按钮、前进/后退按钮等。

  • UI 不负责渲染网页
  • 它仅 接受你的输入 并将工作交给其他组件。
  • 当你输入 URL 并按 Enter 时,UI 会说:“这是请求,请处理。”

2. 浏览器引擎

通常被称为浏览器的 大脑,它负责协调:

  • 导航(后退、前进、重新加载)。
  • UI 层与存储子系统之间的 通信
  • 会话管理(跨标签页的状态、历史记录等)。

常见的浏览器引擎有:

  • Trident(Internet Explorer、早期 Edge)
  • Blink(Chrome、Opera、Brave)
  • WebKit(Safari)
  • Gecko(Firefox)

3. 渲染引擎

渲染引擎将 HTML/CSS 转换为可视内容。它的核心任务包括:

  • 解析 HTML → DOM(文档对象模型)。
  • 解析 CSS → CSSOM(CSS 对象模型)。
  • 构建 渲染树
  • 执行 布局(回流)绘制

它会监听来自浏览器引擎的指令(例如重新加载、刷新)。

4. 网络层

当浏览器引擎收到 URL 后,会请求网络层去获取资源。职责包括:

  • DNS 解析。
  • 建立 TCP/TLS 握手。
  • 发送 HTTP/HTTPS 请求。

常见的要获取的资源有:

  • HTML 文档
  • CSS 样式表
  • JavaScript 文件
  • 图片、字体、视频等

此阶段浏览器仅在 收集原始材料,还不知道它们最终的呈现方式。

5. JavaScript 引擎(JS 解释器)

JavaScript 引擎负责解析、编译并执行 JavaScript 代码。常见的引擎有:

  • V8(Chrome、Node.js)
  • SpiderMonkey(Firefox)
  • JavaScriptCore(Safari、Bun)
  • Chakra(旧版 Edge)

6. UI 后端(图形层)

UI 后端实际在屏幕上绘制像素。渲染引擎生成布局和绘制指令,UI 后端将这些指令转化为光栅图像,由操作系统显示。

7. 存储 / 磁盘 API

提供持久化存储,用于:

  • 浏览器缓存
  • Cookie
  • localStorage / sessionStorage
  • IndexedDB 等

它使用内部方法将数据写入磁盘上的浏览器配置文件夹。

概览图

Browser Internals Diagram
图:浏览器组件及其职责的高级视图。

浏览器的真实工作原理

让我们深入探讨从 输入 URL看到像素 的整个过程。

  1. 用户输入 – 在地址栏按下 Enter
  2. 浏览器引擎 → 网络层 – 引擎指示网络层解析域名(DNS)。
  3. DNS 解析 – 网络层获取服务器的 IP 地址。
  4. 连接握手 – 建立 TCP(可选 TLS)连接。
  5. HTTP 请求 – 网络层发送 HTTP/HTTPS 请求以获取 HTML 文档。
  6. 数据到达 – 第一个字节到达后,流式传输到 渲染引擎
  7. HTML 解析 – 渲染引擎对 HTML 进行标记化,构建 DOM,并开始构建 渲染树
  8. CSS 获取与解析 – 在解析 HTML 时,引擎发现 <link><style> 标签,向网络层请求 CSS 文件,将其解析为 CSSOM,并与 DOM 合并。
  9. JavaScript 执行 – 遇到 <script> 标签会触发 JavaScript 引擎,它可能修改 DOM/CSSOM,导致进一步的布局工作。
  10. 布局(回流) – 完整的渲染树准备好后,引擎计算每个节点的几何尺寸。
  11. 绘制 – 引擎将布局信息转化为绘制指令(图层、纹理)。
  12. UI 后端 – 这些指令交给图形层进行光栅化,并更新屏幕。

结果:你看到的页面。

快速回顾

步骤相关组件发生了什么
1️⃣UI、浏览器引擎捕获用户输入
2️⃣浏览器引擎 → 网络层DNS 查询
3️⃣网络层TCP/TLS 握手
4️⃣网络层发送 HTTP 请求
5️⃣网络层 → 渲染引擎接收 HTML 流
6️⃣渲染引擎标记化 → DOM
7️⃣渲染引擎 + 网络层获取并解析 CSS → CSSOM
8️⃣JS 引擎执行脚本,可能修改 DOM/CSSOM
9️⃣渲染引擎布局(回流)
🔟渲染引擎绘制
1️⃣1️⃣UI 后端光栅化并显示

进一步阅读

  • “How Browsers Work” – 由 Tali Garsiel 与 Paul Irish 撰写的详细系列。
  • MDN Web Docs – 每个浏览器子系统的优秀参考。
  • “Browser Architecture” – 关于现代引擎设计(Blink、Gecko、WebKit)的演讲和文章。

现在,你对将简单 URL 转换为完整渲染网页的隐形机器有了更清晰的认识。

[![HTML Parsing Diagram](https://media2.dev.to/dynamic/image/width=800,height=&fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffas2fanc5chbrn7j2ybr.png)](https://media2.dev.to/dynamic/image/width=800,height=&fit=scale-down,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffas2fanc5chbrn7j2ybr.png)

HTML Parsing: From Text to DOM

HTML 以纯文本形式出现。
浏览器此时并不识别“标题”或“章节”——它只看到字符。

于是它会解析 HTML:

  • 逐个 token 读取
  • 理解标签及其嵌套

随后构建一个称为 DOM 的结构化表示。

什么是 DOM?

文档对象模型 (DOM) 是一种类似树状的结构,其中:

  • 每个 HTML 元素都会成为一个节点
  • 父子关系得以保留

可以把 DOM 想象成元素的家谱树。

DOM Tree


CSS 解析:从样式到 CSSOM

CSS 也从文本开始。
浏览器将 CSS 解析为另一种结构,称为 CSSOM(CSS 对象模型)

该结构存储:

  • 选择器
  • 属性
  • 层叠和继承规则

重要说明:
CSSOM 并不决定位置——它仅定义事物应如何呈现。

CSSOM Diagram

Back to Blog

相关文章

阅读更多 »