Event Loop (事件循环)
定义:是浏览器或者node解决单线程运行时不会阻塞的一种机制。
-
详解:
- JavaScript将任务分为同步任务和异步任务,同步任务进入主线中中,异步任务首先到Event Table进行回调函数注册。
- 当异步任务的触发条件满足,将回调函数从Event Table压入Event Queue中。
- 主线程里面的同步任务执行完毕,系统会去Event Queue中读取异步的回调函数。
- 只要主线程空了,就会去Event Queue读取回调函数,这个过程被称为Event Loop。
-
执行过程:
- 代码开始执行,创建一个全局调用栈,script作为宏任务执行
- 执行过程:同步任务立即执行,异步任务根据任务类型分别注册到微任务和宏任务队列
- 同步任务执行完毕,查看微任务队列
3.1若存在微任务,将微任务队列全部执行
3.2若无微任务,查看宏任务队列,执行第一个宏任务,宏任务执行完毕,查看微任务队列,重复上述操作,直至宏任务队列为空
-
JavaScript是一个单线程语言,当代码运行时,只有一个线程用来处理代码的执行,这样可能会导致页面出现卡顿甚至崩溃的情况,特别是处理大量数据或复杂的运行时。我们可以通过一些方法来实现前端多线程
- Web Workers
- SharedArrayBuffer
- Service Workers