浏览器原理
浏览器进程
- 主进程 只有一个,负责调度主控整个浏览器
- 插件进程 每个插件都有一个进程,只在插件被调用的时候创建
- GPU进程 只有一个,负责 3d 绘制
- 渲染进程 通常每个标签页一个,负责网页的渲染、脚本的执行和事件的处理等
浏览器渲染进程
- GUI 线程 负责页面的构建和渲染,当页面需要被绘制的时候就会启动这个线程,要注意的是该线程和 JS 引擎线程是互斥的,不能并行执行
- JS 引擎线程 负责解析和执行 JS 脚本,因为他和GUI线程的互斥性,所以 JS 代码是会导致页面渲染不连贯的,也就是常说的阻塞页面渲染
- 事件触发线程 归属于浏览器,而不是 JS 引擎,他主要就是控制事件循环,将一系列的任务加入一个队列等 JS 引擎空闲下来后去执行
- 定时器线程 管理定时器的计时,等时间到了就把事件推入任务队列,等待 JS 引擎执行
- HTTP 请求线程 每发送一个请求就会开启一个新的线程,等待响应后把回调函数推入任务队列,等 JS 引擎执行。