event loop

1 篇文章 0 订阅

JavaScript是单线程,非阻塞的

JS执行过程中,遇到一些事件(定时器、文件读取之类的),执行需要等很久,一直等着就会造成阻塞。
所有JS有一套机制,即event loop,用来确定执行顺序,防止阻塞。

浏览器中的event loop

宏任务:script(整体代码)、setTimeout()、setInterval()、postMessage、I/O、UI交互事件
微任务:new Promise().then(回调)、MutationObserver(html5 新特性)
在这里插入图片描述

穿插一下任务执行完是否会渲染的知识:

  • 事件循环不一定每轮都伴随着重渲染,但是如果有微任务,一定会伴随着微任务执行。
  • 决定浏览器视图是否渲染的因素很多,浏览器是非常聪明的。
  • requestAnimationFrame在重新渲染屏幕之前执行,非常适合用来做动画。
  • requestIdleCallback在渲染屏幕之后执行,并且是否有空执行要看浏览器的调度,如果你一定要它在某个时间内执行,请使用 timeout参数。
  • resize和scroll事件其实自带节流,它只在 Event Loop 的渲染阶段去派发事件到 EventTarget 上。

Node.js中的event loop

主要关心与JS相关的几个环节:非主线程上的事件会放到如下几个环节
timers: setTimeout()、setInterval()
poll: JS引擎会在这里停留一段时间,等待看有没有事情做,监听到有事情要做的话就继续往下走,没有的话就在这里待到最大时间再往下走
check: setImmediate

process.nextTick和promise.then比较特殊,是在当前环节结束后立马执行。
await:后面函数中的代码相当于立即执行的,执行后.then里面的代码才要等到当前环节结束再执行。
在这里插入图片描述

看了很多event loop文章后总结给自己的简单好记的过程~
参考:JavaScript中的Event Loop(事件循环)机制、深入解析 EventLoop 和浏览器渲染、帧动画、空闲回调的关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值