关于浏览器渲染进程和Event Loop
一、浏览器渲染进程都有哪些线程?
在浏览器中,每一个tab
页就是一个渲染进程,这个渲染进程中包含以下五个线程:
JS
引擎线程(主线程,执行JS
代码)GUI
渲染线程(解析HTML
,CSS
,构建DOM
树和RenderObject
树,布局和绘制等)- 事件触发线程(控制事件循环,当事件被触发,将异步任务或者某些触发事件如:
click
等放入事件队列中,等待JS
引擎执行) - 定时器线程(处理
settimeout
和settimeinterval
) - 异步
HTTP
请求线程(负责发起http
网络请求,当请求完成后将事件放入事件队列中,等待JS
引擎执行)
二、事件循环
1.宏任务
可以理解每次执行栈执行的都是一次宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行)。每个宏任务执行完之后会在下一个宏任务执行之前进行渲染。
2.微任务
像Promise
和process.nextTick
等都是输入微任务,当执行完当前宏任务后会检查微任务队列,若有微任务则会执行完所有微任务,最后再进行渲染。
参考博文:
[1]: https://segmentfault.com/a/1190000012925872#articleHeader16