Mark24
记录灵感、技术、思考
JavaScript事件循环EventLoop
EventLoop
实际上浏览器的事件循环标准是由 HTML 标准规定的,具体来说就是由whatwg规定的,具体内容可以参考 event-loops in browser。
而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不属于宏任务,也不属于微任务,它是一个与微任务平行的一个操作步骤。
EventLoop Visualizer
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).