news 2026/8/9 9:27:55

浏览器原理

作者头像

张小明

前端开发工程师

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/8/7 22:51:51

Turnitin系统查英文AI率多少为正常?报告显示星号*%怎么办?

很多学校和杂志社都在说需要检测论文AI率&#xff0c;但是论文AI率多少才算正常呢&#xff1f; Turnitin系统AI检测系统&#xff1a;https://students-turnai.similarity-check.com/ 今天这篇内容就给大家分享一下。 很多同学使用Turnitin系统检测了英文论文AI率之后&#x…

作者头像 李华
网站建设 2026/8/9 7:08:18

暖通净化空调恒温恒湿项目:PLC 与触摸屏上位机程序探秘

暖通净化空调恒温恒湿项目包括PLC程序和触摸屏上位机程序。 标准化很好的内部用的函数都封装成了标准块一套很好的学习资料。在暖通净化空调恒温恒湿项目里&#xff0c;PLC 程序和触摸屏上位机程序就像项目运转的左膀右臂&#xff0c;承担着关键任务。先聊聊 PLC 程序&#xff…

作者头像 李华
网站建设 2026/8/8 17:33:32

第30章 Shell 正则表达式实战:精准匹配字符串、日志与配置项

本章导语:正则表达式是文本处理的"瑞士军刀",是 Linux 系统管理和数据处理的核心技能。掌握正则表达式,你将能够精准匹配和处理各种复杂的文本模式,从日志分析到配置文件管理,从数据清洗到格式验证,无所不能。本章将通过丰富的实战案例,帮助你彻底掌握正则表达…

作者头像 李华
网站建设 2026/8/9 7:32:52

音视频学习(七十二):视频压缩:分块与预处理

分块与预处理是视频压缩&#xff08;编码&#xff09;流程的起点&#xff0c;它的目标是将原始的、高冗余的视频数据转换成适合高效压缩的格式和基本处理单元。这一阶段的工作质量直接影响后续运动估计、变换编码和量化等步骤的效率和最终的压缩比与图像质量。 预处理的核心目标…

作者头像 李华
网站建设 2026/8/8 7:42:51

AMD Ryzen性能调优:快速掌握处理器调试工具的使用技巧

AMD Ryzen性能调优&#xff1a;快速掌握处理器调试工具的使用技巧 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

作者头像 李华
网站建设 2026/8/7 23:01:35

深蓝词库转换:轻松打通全平台输入法数据壁垒

深蓝词库转换&#xff1a;轻松打通全平台输入法数据壁垒 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 想要实现搜狗、百度、QQ、微软等主流输入法之间的词库自由迁…

作者头像 李华