事件循环
任务队列类型
宏任务:
macro task- script(整体代码)
setTimeoutsetInterval- I/O
- UI交互事件
setImmediate(Node.js环境)
微任务:
micro taskPromiseMutationObserverprocess.nextTick(Node.js环境,优先级最高)
特殊任务:
requestAnimationFrame:总在渲染队列之前执行
渲染队列
- 收集
css,计算样式 - 创建渲染树,
layout布局,设置元素的位置 print,渲染为像素展示到页面上
事件循环过程
主线程运行时,执行整体代码,整体代码调用浏览器的各种
api,api会向任务队列中加入各种事件。查询任务队列中是否有任务(宏任务)完成,有则取出一个进行执行。
查询微任务队列是否有任务(微任务)完成,有则取出执行,直到清空微任务队列
检查是否需要进行渲染,需要渲染则先执行
requestAnimationFrame方法,然后执行渲染队列
当栈中的代码执行完毕,开始进行循环,重复一下2-4
NodeJs中的事件循环
在11版本之前为固定执行某些阶段,之后与浏览器相同。
