浏览器工作原理

浏览器工作原理

文章目录


浏览器的核心工作是请求资源、解析资源、渲染页面,最终将 Web 内容呈现给用户。工作流程可拆解为 7 个核心步骤,同时依赖多进程架构保障性能

一、现代浏览器的多进程架构

现代浏览器采用多进程设计,不同进程各司其职,避免单个页面崩溃影响整个浏览器:

进程类型

  1. 浏览器进程
    作用:控制浏览器的主界面(地址栏、标签页、前进 / 后退按钮),管理网络请求和文件访问
  2. 渲染进程
    作用:责页面解析、渲染、执行 JS,每个标签页默认一个独立进程(沙箱隔离)
  3. GPU 进程
    作用:处理图形渲染(3D 动画、CSS 变换),提升页面流畅度
  4. 插件进程
    作用:管理浏览器插件(如 Flash),避免插件崩溃影响主程序
  5. 网络进程
    作用:专门处理 HTTP/HTTPS 请求、DNS 解析、缓存管理

二、核心工作流程(从输入 URL 到页面展示)

  1. 输入 URL 并发起请求
  • 当你在地址栏输入 URL(如 https://www.example.com),浏览器首先判断是否为搜索关键词,若是则使用默认搜索引擎查询;若为 URL,则进入下一步
  • DNS 解析:将域名(www.example.com)转换为 IP 地址(如 192.168.1.1),优先查询本地 DNS 缓存,若未命中则向 DNS 服务器请求
  • 建立 TCP 连接:通过 三次握手 建立客户端与服务器的连接,、
  • 发送 HTTP 请求:浏览器向服务器发送请求报文,包含请求方法(GET/POST)、请求头(Cookie、User-Agent)、请求体(POST 数据)等。
  1. 服务器处理请求并返回响应
    服务器接收请求后,根据 URL 路径处理资源(如读取静态文件、查询数据库生成动态页面),然后返回 HTTP 响应报文,包含:
  • 状态码:如 200 OK(成功)、404 Not Found(资源不存在)、500 Internal Server Error(服务器错误)。
  • 响应头:Content-Type(资源类型,如 text/html、application/json)
  • 响应体:HTML/CSS/JS 文件、图片等资源内容。
  1. 网络进程接收响应并处理
  • 网络进程接收到响应后,首先判断 资源是否可缓存:若 Cache-Control 允许缓存,则将资源存入本地缓存,下次请求直接使用。
  • 若响应是 HTML 文件,则将其转发给 渲染进程;若为其他资源(如 CSS/JS/ 图片),则先下载,等待渲染进程请求时再提供。
  1. 构建 DOM 树
    渲染进程的 HTML 解析器 逐行解析 HTML 代码,将标签转换为 DOM 节点,最终构建成 DOM 树
  • 解析过程中遇到阻塞资源(如 <script> 标签),会暂停 HTML 解析,优先下载并执行 JS(因为 JS 可能修改 DOM 结构)。
  • 可通过 async/defer 属性优化:async 异步下载 JS,下载完成后立即执行;defer 异步下载,HTML 解析完成后执行。
  1. 解析 CSS(构建 CSSOM 树)
  • 解析 HTML 时遇到 <link rel="stylesheet"> 或 <style> 标签,会启动 CSS 解析器,解析 CSS 规则,构建 CSS 对象模型(CSSOM 树)
  • CSSOM 树存储了所有元素的样式信息,且 CSS 解析不会阻塞 HTML 解析,但会阻塞页面渲染
  1. 构建渲染树
    渲染进程将 DOM 树 和 CSSOM 树 合并,生成 渲染树。渲染树只包含需要显示的节点(如 <div>、<p>),不包含隐藏节点(如 display: none 的元素、<head> 标签)。
  • 每个节点都带有样式信息,为后续布局和绘制做准备。
  1. 布局(Layout)与绘制(Paint)
  • 布局(回流 / 重排):根据渲染树计算每个节点的 几何信息,包括位置、宽度、高度,生成 布局树。若后续 DOM 或样式发生变化(如修改 width、display),会触发回流,性能消耗较大。
  • 绘制:遍历布局树,将每个节点的 视觉属性(颜色、背景、阴影)绘制到 图层 上。不同元素可能分配到不同图层(如视频、z-index 较高的元素),图层可以独立绘制和合成,提升性能。
  • 合成(Composite):将所有图层合并为一个页面,通过 GPU 渲染到屏幕上,最终呈现出用户看到的网页。

三、关键补充:重绘与回流

  • 回流(重排):元素的几何属性变化(如尺寸、位置、DOM 增删)导致布局重新计算,性能消耗大。
  • 重绘:元素的视觉属性变化(如颜色、背景),无需重新计算布局,性能消耗较小。
  • 优化建议:
  1. 避免频繁修改 style,使用 class 批量修改样式。
  2. 使用 documentFragment 批量操作 DOM,减少回流次数。
  3. 对复杂动画使用 transform 和 opacity,这两个属性只会触发合成,不会触发回流 / 重绘。
相关推荐
西陵2 小时前
为什么说 AI 赋能前端开发,已经不是选择题,而是必然趋势?
前端·架构·ai编程
by__csdn3 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
天天扭码4 小时前
前端如何实现RAG?一文带你速通,使用RAG实现长期记忆
前端·node.js·ai编程
Luna-player4 小时前
在前端中,<a> 标签的 href=“javascript:;“ 这个是什么意思
开发语言·前端·javascript
lionliu05194 小时前
js的扩展运算符的理解
前端·javascript·vue.js
小草cys4 小时前
项目7-七彩天气app任务7.4.2“关于”弹窗
开发语言·前端·javascript
奇舞精选4 小时前
GELab-Zero 技术解析:当豆包联手中兴,开源界如何守住端侧 AI 的“最后防线”?
前端·aigc
奇舞精选4 小时前
Vercel AI SDK:构建现代 Web AI 应用指南
前端·aigc
神仙别闹5 小时前
基于C语言实现B树存储的图书管理系统
c语言·前端·b树