浏览器和nodejs事件循环(Event Loop)区别

Posted 沿着路走到底

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浏览器和nodejs事件循环(Event Loop)区别相关的知识,希望对你有一定的参考价值。

单线程和异步

JS是单线程的(无论在浏览器还是 nodejs)

浏览器中 JS 执行和 DOM 渲染共用一个线程

JS 是单线程,这种场景就只能使用“异步”

宏任务和微任务

宏任务:如 setTimeout setInterval 网络请求 requestIdleCallback  requestAnimationFrame

微任务:如 promise async / await

微任务在下一轮 DOM 渲染之前执行,宏任务在之后执行

两者表面的区别:

第一,微任务比宏任务更快执行

console.log(\'start\')
setTimeout(() => 
    console.log(\'timeout\')
)
Promise.resolve().then(() => 
    console.log(\'promise.then\')
)
console.log(\'end\')

// start  end   promise.then    timeout

第二,微任务在 DOM 渲染前执行,而宏任务在 DOM 显示后(即真正显示到页面上,肉眼可见)执行

const p = document.createElement(\'p\')
p.innerhtml = \'new paragraph\'
document.body.appendChild(p)
console.log(\'length----\', list.length)

console.log(\'start\')

// 渲染之后
setTimeout(() =

以上是关于浏览器和nodejs事件循环(Event Loop)区别的主要内容,如果未能解决你的问题,请参考以下文章

JS 事件循环 event loop

我已经迷失在事件环(event-loop)中了Nodejs篇

浅析JS的Event Loop机制

浏览器的 Event Loop

63. 浏览器里的 Event Loop

小心得浅析Nodejs Event Loop