news 2026/4/23 10:16:08

浏览器原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
浏览器原理

浏览器原理

一、 宏观视角:Chrome 多进程架构

现在的浏览器更像是一个分布式操作系统,而非简单的应用程序。

1. 四大核心进程

  • Browser Process (主进程)
    • 职责:负责 UI(地址栏、书签)、协调子进程、管理存储(Cookie/Storage)。
    • 地位:整个浏览器的总指挥。
  • Renderer Process (渲染进程)
    • 职责:解析 HTML/CSS/JS,将网页转化为图像。
    • 机制沙箱隔离,通常一页一进程(Site Isolation 策略保证跨域隔离)。
  • GPU Process
    • 职责:负责页面最终的绘制与合成,处理 WebGL、CSS3 3D 变换。
  • Network Service
    • 职责:独立负责网络资源加载,提升安全性和稳定性(防崩溃)。

2. 为什么是多进程?

  • 稳定性:一个 Tab 崩了,不会导致整个浏览器崩。
  • 安全性:渲染进程运行在沙箱中,限制了读写系统文件的权限。
  • 流畅性:JS 阻塞渲染进程时,不会影响 Browser 进程的 UI 响应(如切换 Tab)。

二、 导航全流程:从 URL 到页面展示

当你在地址栏按下回车:

  1. 处理输入:Browser 进程判断是 URL 还是搜索查询。
  2. 网络请求:Network Service 发起 DNS -> TCP -> TLS -> HTTP 请求。
    • 注:Service Worker 可在此阶段拦截请求,直接返回缓存。
  3. 响应读取:检查 MIME Type。如果是 HTML,通知 Browser 进程。
  4. 准备渲染进程:Browser 进程启动或复用一个 Renderer 进程。
  5. 提交导航
    • 关键点:Renderer 进程接收数据流。此时旧页面卸载,新页面白屏,Loading 圈开始转动。

三、 渲染流水线

这是前端性能优化的核心战场。

1. 解析 (Parsing)

  • HTML ➝ DOM 树:构建文档结构。
  • CSS ➝ CSSOM 树:计算具体样式。

2. 布局 (Layout/Reflow)

  • DOM + CSSOM ➝ Layout Tree (布局树)
  • 规则
    • display: none不在布局树中。
    • visibility: hidden布局树中(占位)。
    • 布局树节点包含了元素的几何信息 (x, y, width, height)

3. 分层 (Layering)

  • 浏览器将页面拆分为多个图层 (Layers)以实现独立光栅化。
  • 触发条件will-change,transform: translateZ,opacity,<video>,z-index上下文等。
  • 目的:避免牵一发而动全身,减少重绘区域。

4. 绘制

  • 生成绘制列表 (Paint Records)。注意,这只是一堆绘制指令(“画个红圈”),并没有真正填充像素。

5. 合成 —— 性能之源

  • 角色:合成线程 (Compositor Thread) 与 GPU 配合。
  • 流程
    1. 分块:将图层切分成小块。
    2. 光栅化:将图块转换为位图 (Bitmap)(通常由 GPU 完成)。
    3. 合成:GPU 将所有位图合成最终屏幕图像。

总结:性能优化三大法宝

  • Reflow (重排):修改了几何属性(宽/高)。触发Layout -> Paint -> Composite最贵
  • Repaint (重绘):修改了颜色/背景。触发Paint -> Composite次之
  • Composite (合成):修改transformopacity只触发 Composite
    • 原理:不占用主线程,直接在合成线程操作图块。即使 JS 卡死,动画依然流畅。

四、 JavaScript 运行机制

1. 内存管理 (V8)

  • :存储执行上下文、基本类型。
  • :存储对象。GC 采用分代回收(新生代 Scavenge 算法 + 老生代 标记-清除-整理)。

2. 事件循环 (Event Loop)

浏览器的循环机制如下(与 Node.js 略有不同):

  1. 执行栈 (Stack):同步代码执行完毕。
  2. 微任务:清空队列!(Promise.then,MutationObserver).
    • Microtasks 优先级极高,插队执行,直到队列为空。
  3. 渲染时机:判断是否需要更新屏幕(通常 16.6ms 一次)。
    • 如果有,执行requestAnimationFrame-> Style -> Layout -> Paint。
  4. 宏任务:取一个任务执行。(setTimeout,setInterval, I/O, UI Event).
  5. 回到第一步。

启示

  1. 动画选 CSS:尽量用transformopacity,避开 layout 属性(top/left/width)。
  2. 避免强制同步布局:不要在修改样式后紧接着读取offsetHeight/scrollTop等属性。
  3. 减少主线程阻塞:复杂的 JS 计算会延迟渲染和交互,考虑使用Web Worker
  4. 利用空闲时间:低优先级的逻辑可以使用requestIdleCallback
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:21:19

XXL-TOOL v2.4.0 发布 | 布隆过滤器、Excel流式读写、高性能BeanCopy

Release Notes 1、【新增】BloomFilter&#xff08;布隆过滤器&#xff09;&#xff1a;一种基于多哈希函数和位数组的概率型数据结构&#xff0c;具有高效空间利用与快速查询特性&#xff1b;2、【新增】Trie&#xff08;前缀数&#xff09;&#xff1a;一种哈希树的变种&…

作者头像 李华
网站建设 2026/4/16 10:04:19

管理软件包

一.rpm管理软件包1.安装软件-i安装指定一个或多个软件包-v显示安装过程-h以#号显示安装进度2.查询软件-q查询软件包信息-a查询已经安装的软件包-c显示软件包的配置文件列表-d显示软件包的文本文件列表-p查询软件包文件&#xff0c;通常和其他选项组合使用-g查询所属组的软件包-…

作者头像 李华
网站建设 2026/4/21 20:14:07

DAY24 奇异值SVD分解

一、SVD的实际价值 1. 计算效率提升 特征从n维降至k维&#xff08;k<n&#xff09; 减少模型参数数量 加快训练和预测速度 2. 模型泛化能力 去除噪声和冗余信息 可能提高模型在测试集上的表现 减少过拟合风险 二、实际书写思路及其代码 针对心脏并数据集我们进行了…

作者头像 李华
网站建设 2026/4/14 19:14:27

GUID为什么不会重复?

GUID为什么不会重复? GUID/UUID &#xff08;全局唯一标识符&#xff09;之所以被认为“几乎不会重复”&#xff0c;是因为其庞大的组合空间和精心设计的生成算法&#xff0c;使得在现实世界中重复的概率低到可以忽略不计。 以下是 GUID 不会重复的核心原因&#xff1a; 1. 庞…

作者头像 李华
网站建设 2026/4/23 2:30:58

E-Hentai批量下载工具:高效管理数字收藏资源的最佳方案

在数字资源日益丰富的今天&#xff0c;如何高效管理和保存有价值的在线内容成为了许多用户的共同痛点。面对心仪的图库资源&#xff0c;传统的手动保存方式不仅效率低下&#xff0c;还容易导致文件混乱。针对这一需求&#xff0c;E-Hentai-Downloader提供了一个简单而强大的解决…

作者头像 李华
网站建设 2026/4/18 12:26:05

布隆过滤器

一、布隆过滤器 1. 什么是布隆过滤器&#xff1f; 布隆过滤器是一种空间效率极高的概率型数据结构&#xff0c;核心作用是快速判断「一个元素是否存在于集合中」。它的特点可以总结为&#xff1a; 说「元素不在」→ 100%准确&#xff08;绝对没在集合里&#xff09;&#xff1b…

作者头像 李华