JavaScript事件循环EventLoop

EventLoop

实际上浏览器的事件循环标准是由 HTML 标准规定的,具体来说就是由whatwg规定的,具体内容可以参考 event-loops in browser

event-loop 处理模型

而NodeJS中事件循环其实也略有不同,具体可以参考 event-loops in nodejs

宏任务微任务

宏任务(Macrotask)和微任务(Microtask)。

宏任务包括:script(整体代码),I/O, setTimeout,setInterval,requestAnimationFrame,setImmediate。

其中setImmediate只存在于Node中,requestAnimationFrame只存在于浏览器中。

微任务包括: Promise,Object.observe(已废弃),MutationObserver(html5新特性),process.nextTick。

其中process.nextTick只存在于Node中,MutationObserver只存在于浏览器中。

UI Rendering不属于宏任务,也不属于微任务,它是一个与微任务平行的一个操作步骤。

参考 event-loop-processing-model

EventLoop Visualizer

JavaScript Visualizer 9000

Event Loop

step1 Evaluate Script

step2 Run a Task

step3 Run all Microtasks

step4 Rerender
  
  	  Rerender the UI. Then, return to step 2. (This step only applies to browsers, not NodeJS).

Mark24

Everything can Mix.