浏览器原理

渲染流水线

  1. 构建DOM树:HTML → DOM树
  2. 样式计算:构建CSS树 → 单位转换 → 计算每个节点样式
  3. 布局阶段:创建布局树 → 布局计算 → 分层
  4. 图层绘制:输出绘制指令列表
  5. 栅格化:GPU绘制,视窗优先级最高

重排、重绘、合成

  • 重排:修改宽高等属性 → 整个渲染流水线重走
  • 重绘:修改色彩属性 → 跳过布局、分层阶段
  • 合成:transform动画 → 不触发重排重绘

JS执行机制

  • V8解析JS后先编译,生成上下文再运行
  • 全局上下文 → 函数运行上下文 → eval上下文
  • 调用栈:控制执行上下文,递归过深会爆栈
  • 作用域链:由词法作用域决定,与运行时无关
  • ES6箭头函数不创建自己的执行上下文

消息队列

  • 宏任务:由宿主发起(浏览器/Node.js)
  • 微任务:由引擎发起(Promise等)
  • 微任务在宏任务主要任务执行完后、下一个宏任务前执行

浏览器请求

  1. 构建HTTP请求行
  2. 浏览器本地缓存拦截
  3. DNS查询
  4. TCP队列(HTTP/1.1: 6个TCP; HTTP/2.0: 1个TCP多路复用)
  5. 建立TCP连接

关联