浏览器包含了哪些进程

  • 主进程
  • 第三方插件进程
  • GPU进程(3D绘制)
  • 渲染进程(浏览器内核)

前端常接触到的就是渲染进程,也就是浏览器内核。负责页面的渲染,脚本执行,事件处理等…

渲染进程里面又包含多个线程

  • GUI渲染线程
  1. 负责页面的布局,绘制以及渲染。
  2. 在页面发生回流(重排)以及重绘时就会执行该线程。
  3. 与JS引擎线程互斥,避免影响绘制效果。
  • js引擎线程
  1. 负责解析并执行相关的js脚本
  2. 只存在一个js引擎线程(单线程)
  3. 与GUI渲染线程互斥,避免影响绘制结果
  • 事件触发线程
  • 定时器触发线程
  • 异步HTTP请求线程

    浏览器的事件循环机制

  1. 一开始整段脚本作为第一个宏任务执行
  2. 执行过程中,同步代码直接执行,宏任务进入宏任务队列。微任务进入微任务队列
  3. 当前宏任务执行完出队,检查微任务队列,如果有,依次执行,知道微任务为空
  4. 执行浏览器的GUI线程,进行页面渲染
  5. 检查是否有Web worker任务,有则执行
  6. 执行队首的宏任务,回到2.知道宏任务和微任务队列为空