Skip to content

浏览器原理

本目录包含关于浏览器工作原理、JavaScript 引擎和内存管理的深入学习资料。

📚 目录内容

1. 浏览器多进程架构与多线程模型

(新增) 深入理解浏览器的运行基石:

  • 浏览器的主进程、渲染进程、GPU进程等
  • 渲染进程中的 GUI 线程与 JS 引擎线程的互斥关系
  • 为什么 JavaScript 是单线程的
  • Web Worker 的作用

2. 浏览器渲染流程

(新增) 解析页面是如何显示出来的:

  • 关键渲染路径 (CRP) 详解
  • DOM 树与 CSSOM 树的构建
  • 布局 (Layout) 与回流 (Reflow)
  • 绘制 (Paint) 与重绘 (Repaint)
  • 合成 (Composite) 与层 (Layer)
  • 性能优化:如何减少回流与重绘

3. 事件循环与异步机制

(新增) 彻底搞懂 JS 的异步执行机制:

  • 宏任务 (MacroTask) 与 微任务 (MicroTask) 的区别
  • Event Loop 的完整执行流程
  • setTimeout, Promise, async/await 的执行顺序
  • Node.js 与浏览器 Event Loop 的异同

4. 浏览器缓存机制

(新增) 性能优化的核心:

  • 强缓存 (Cache-Control) 与协商缓存 (ETag) 的区别
  • Service Worker 缓存策略
  • 缓存优先级与决策流程

5. 浏览器安全机制

(新增) Web 安全必修课:

  • 同源策略 (Same-Origin Policy) 详解
  • 跨域解决方案:CORS 简单请求与预检请求
  • XSS (跨站脚本攻击) 与 CSRF (跨站请求伪造) 的原理与防御
  • CSP 内容安全策略

6. 浏览器本地存储

(新增) 各种存储方案对比:

  • Cookie, LocalStorage, SessionStorage, IndexedDB 的区别
  • 各自的适用场景与容量限制
  • 安全性考量

7. 从输入 URL 到页面展示的全过程

(新增) 知识点大综合:

  • 完整的网络请求流程 (DNS -> TCP -> HTTP)
  • 浏览器的解析与渲染流程串联
  • 每个阶段的性能优化点

8. 垃圾回收机制

深入理解 JavaScript 的垃圾回收机制,包括:

  • 垃圾回收的基本概念(可达性、根对象)

  • 主要的垃圾回收算法(引用计数、标记-清除、标记-整理、复制算法)

  • 分代回收策略(新生代 vs 老生代)

  • 增量标记、并发标记等优化技术

  • 常见的内存泄漏场景和解决方案

  • 性能优化建议

9. V8 引擎原理

全面解析 V8 引擎的工作原理,包括:

  • V8 引擎架构和核心组件

  • JavaScript 代码执行流程(解析 → 字节码 → 机器码)

  • Ignition 解释器和 TurboFan 优化编译器

  • 隐藏类(Hidden Classes)和内联缓存(Inline Caching)

  • 数组优化和元素类型

  • 推测性优化和去优化

  • 性能调优最佳实践

10. 内存管理

JavaScript 内存管理的实践指南,包括:

  • 内存生命周期(分配 → 使用 → 释放)

  • 栈内存和堆内存的区别

  • 常见内存泄漏场景和解决方案

  • 内存优化技巧(对象池、及时释放引用等)

  • 内存监控和调试工具

  • 最佳实践和检查清单

🎯 学习路径

初级

  1. 理解基本的内存概念(栈、堆、引用)
  2. 了解垃圾回收的基本原理
  3. 学习常见的内存泄漏场景

中级

  1. 深入学习标记-清除算法
  2. 理解分代回收策略
  3. 掌握 V8 的执行流程
  4. 学习使用 DevTools 进行内存分析

高级

  1. 理解隐藏类和内联缓存
  2. 掌握 V8 的优化机制
  3. 学习编写高性能代码
  4. 深入理解增量标记和并发标记

🛠️ 实践建议

  1. 使用 Chrome DevTools

    • 定期拍摄堆快照,查找内存泄漏
    • 使用 Performance 面板分析 GC 事件
    • 监控内存分配时间线
  2. 编写性能测试

    javascript
    // 测试内存使用
    const before = performance.memory.usedJSHeapSize;
    // 执行操作
    yourFunction();
    const after = performance.memory.usedJSHeapSize;
    console.log(`Memory used: ${(after - before) / 1024 / 1024} MB`);
  3. Code Review 检查点

    • 是否有未清理的定时器?
    • 是否有未移除的事件监听器?
    • 闭包是否引用了不必要的变量?
    • 对象形状是否保持一致?
    • 是否避免了数组空洞?

📖 扩展阅读

🔗 相关主题

  • 性能优化:参见 ../基础/performance-dom 目录
  • 异步编程:参见 ../基础/async 目录
  • 函数式编程:参见 ../函数式编程 目录

💡 快速参考

避免内存泄漏的最佳实践

javascript
// ✅ 及时清理定时器
const timer = setInterval(() => {}, 1000);
clearInterval(timer);

// ✅ 移除事件监听器
element.removeEventListener('click', handler);

// ✅ 释放大对象引用
largeObject = null;

// ✅ 使用 WeakMap 代替 Map(适用场景)
const cache = new WeakMap();

// ✅ 保持对象形状一致
function createPoint(x, y, z = 0) {
  return { x, y, z };  // 总是包含 z
}

编写优化友好的代码

javascript
// ✅ 类型稳定
function add(a, b) {
  return a + b;  // 始终传入相同类型
}

// ✅ 避免删除属性
obj.prop = null;  // 而不是 delete obj.prop

// ✅ 避免创建数组空洞
arr.push(value);  // 而不是 arr[10] = value

// ✅ 使用对象池
const pool = new ObjectPool();
const obj = pool.acquire();
// 使用 obj
pool.release(obj);

最后更新: 2026年1月9日

MIT Licensed | Keep Learning.