浏览器原理

浏览器原理

一、 宏观视角: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1015338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用 vn.py 实现波动率倒数仓位:把螺纹钢回测年化从 9% 提到 89% 的完整笔记

1. 问题背景 在 CTA 趋势策略中&#xff0c;“双均线突破”是最简单的入场信号之一。 然而固定手数&#xff08;always 1 lot&#xff09;会导致&#xff1a; 低波动阶段仓位太轻&#xff0c;浪费行情&#xff1b;高波动阶段仓位过重&#xff0c;回撤巨大&#xff1b;长期夏普低…

简单使用FalkorDB和Neo4j图数据库

简单使用FalkorDB图数据库 1 介绍 FalkorDB 是一个通过稀疏矩阵和线性代数实现高性能查询的图数据库&#xff0c;专注于为LLM和企业级GraphRAG应用提供超低延迟的知识图谱服务。对中文的支持不太好。 # 官网 https://www.falkordb.com/# 官方文档 https://docs.falkordb.com/#…

Docker学习笔记—day012

Docker学习笔记—day012&#xff08;容器化编排&#xff09; 文章目录一、Docker-Compose1.1、docker-compose是什么1.2、docker-compose能干什么1.3、docker-compose下载1.4、docker-compose核心概念1.5、docker-compose使用的三个步骤1.6、docker-compose使用的三个步骤二、D…

基于组合赋权法(BWM+CRITIC)与可拓云理论的综合风险评估模型MATLAB代码

一、研究背景 化工园区作为危险化学品集中区域&#xff0c;其安全风险评估是预防重大事故的关键。传统评估方法常依赖专家经验&#xff0c;存在主观性强、不确定性处理不足等问题。本研究基于组合赋权法&#xff08;BWM CRITIC&#xff09; 与 可拓云理论&#xff0c;构建一种…

微信小程序开发实战之 04-微信小程序常用 API(上)

小程序组件与 API 加载提示框 API wx.showLoading 方法用于弹出加载提示框&#xff0c;加载提示框弹出后&#xff0c;不会自动关闭&#xff0c;需要手动调用 wx.hideLoading 方法才能关闭加载提示框。 wx.showLoading 方法的基本选项&#xff1a;名称描述title提示的内容mask是…

Chasys Draw IES Artist:开源免费的图像处理与图形设计全能工具

Chasys Draw IES Artist是一款功能全面的开源图像处理软件&#xff0c;集图形设计、照片编辑和批量处理于一体。作为完全免费的工具&#xff0c;它既适合图像处理初学者学习使用&#xff0c;也能满足专业用户的创作需求&#xff0c;在保持轻量化的同时提供了丰富的专业级功能。…

1.20 深度学习优化器对比

💖💖感谢各位观看这篇文章,💖💖点赞💖💖、收藏💖💖、你的支持是我前进的动力!💖💖 💖💖感谢你的阅读💖,专栏文章💖持续更新!💖关注不迷路!!💖 1 核心优化器分类与对比表 优化器 核心原理 学习率特性 优点 缺点 关键参数 典型学习率 适用场…

什么是 Backtrader?一篇给 Python 量化爱好者的超全说明书

1. 一句话速览 Backtrader “纯 Python 写成的单文件量化生态”&#xff1a; 回测 实盘 可视化&#xff0c;三合一&#xff1b;零依赖编译&#xff0c;pip 即装&#xff1b;策略代码 ≈ 写公式&#xff0c;支持向量化 & 事件驱动双模式&#xff1b;社区活跃&#xff0c;…

多签钱包:多人签名才能执行的操作

0x01 什么是多签钱包 imtoken钱包 tp钱包 比特派钱包 与多签钱包对应的是单签钱包[2]&#xff0c;我们要往区块链上发送一笔转账交易&#xff0c;需要去用钱包去做一个签名&#xff0c;我们自己签好名把交易发送出去&#xff0c;交易执行成功转账就成功&#xff0c;这就是典型…

我在学c语言分支和循环的见解和踩过的坑

在这篇blog中我将边讲解边说说我遇到的困难&#xff0c;我将分为12个点来论述&#xff1b;1. if语句 2. 关系操作符 3. 条件操作符 4. 逻辑操作符&#xff1a;&& , || , &#xff01; 5. switch语句 6. while循环 7. for循环 8. do-while循环 9. break和continue语句 1…

今天我们继续学习kubernetes内容Helm

一、Helm概述 helm通过打包的方式&#xff0c;支持发布的版本管理和控制&#xff0c;很大程度上简化了Kubernetes应用的部署和管理。 Helm本质就是让k8s的应用管理&#xff08;Deployment、Service等&#xff09;可配置&#xff0c;能动态生成。通过动态生成K8S资源清单文&…

CANFD 总线多节点扩展技术:节点数量限制与突破方案

在工业控制、汽车电子等 CANFD 总线应用场景中&#xff0c;节点数量直接影响系统覆盖范围与数据交互效率。节点数量并非无限制扩展&#xff0c;其受总线特性、硬件设计、协议配置等多重因素约束。本文将深入解析 CANFD 总线节点数量限制的核心原因&#xff0c;提供切实可行的扩…

REAPER数字音频工作站:轻量高效的专业音频制作解决方案

REAPER作为一款功能全面的数字音频工作站&#xff08;DAW&#xff09;&#xff0c;以其卓越的性能和高度可定制性在音频制作领域广受好评。这款由Cockos开发的软件在保持轻量级设计的同时&#xff0c;提供了完整的专业音频处理能力&#xff0c;适合从初学者到专业工程师的各类用…

配电网可靠性评估—序贯蒙特卡洛模拟法研究附Matlab代码

作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询内…

托福培训机构深度测评:从师资到服务,哪家用数据征服了90%的考生? - 品牌测评鉴赏家

托福培训机构深度测评:从师资到服务,哪家用数据征服了90%的考生?一、2025 托福备考新趋势:三大核心需求升级 (一)机考改革倒逼机构适配性升级 在 2025 年,托福机考改革的浪潮汹涌来袭,其中 “听力加试随机化”…

光伏储能虚拟同步发电机Simulink仿真模型探究

光伏储能虚拟同步发电机simulink仿真模型 主电路&#xff1a;三相全桥逆变 直流侧电压800V 光伏模块&#xff1a;光伏板结合Boost电路应用MPPT 储能模块&#xff1a;采用双闭环控制&#xff0c;外环直流母线电容稳压&#xff0c;内环为电池电流环控制 Matlab/simulink 2021b及以…

机器学习资源合集

Python数据分析与机器学习实战课程 文件大小: 15.6GB内容特色: 15.6GB Python数据机器学习全流程项目源码适用人群: 想转岗AI/数据岗的大学生与程序员核心价值: 代码即用&#xff0c;快速复现Kaggle级建模与调优下载链接: https://pan.quark.cn/s/e349f01253fa 【数据技术课堂…

linux中的一些配置

文章目录Tabby配置Tabby配置 配置文件&#xff08;2025.12.14&#xff09;如下&#xff0c;直接复制粘贴即可&#xff1a;&#xff08;需要额外安装一些拓展&#xff1a; altair&#xff08;配色&#xff09;&#xff0c; save-output &#xff09; version: 7 profiles: [] …

数据结构==B-树==

一、B 树基础概念&#xff08;铺垫层&#xff09; 知识点梳理 名称定义&#xff1a;B 树&#xff08;B-tree&#xff09;是多叉平衡查找树&#xff0c;正确名称为 “B 树”&#xff0c;非 “B 阶树”&#xff08;“阶” 是 B 树的属性&#xff0c;如 m 阶 B 树&#xff09;。…