JS JavaScript事件循环机制
栏目: JavaScript · 发布时间: 5年前
内容简介:上图解释:先看一段代码的执行结果:
JS JavaScript事件循环机制
首先区分进程和线程
- 进程是
cpu
资源分配的最小单位(系统会给它分配内存) - 不同的进程之间是可以同学的,如管道、
FIFO
(命名管道)、消息队列 - 一个进程里有单个或多个线程
- 浏览器是多进程的,因为系统给它的进程分配了资源(
cpu
、内存)(打开Chrome
会有一个主进程,每打开一个Tab
页就有一个独立的进程)
浏览器的渲染进程是多线程的
GUI JS HTTP
事件循环机制
上图解释:
- 同步和异步任务分别进入不同的执行"场所",同步的进入主线程,异步的进入
Event Table
并注册函数 - 当指定的事情完成时,
Event Table
会将这个函数移入Event Queue
- 当栈中的代码执行完毕,执行栈(
call stack
)中的任务为空时,就会读取任务队列(Event quene
)中的事件,去执行对应的回调 - 如此循环,形成js的事件循环机制(
Event Loop
)
宏任务(macrotask)和微任务(microtask)
先看一段代码的执行结果:
console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0); Promise.resolve().then(function() { console.log('promise1'); }).then(function() { console.log('promise2'); }); console.log('script end');
执行结果: script start , script end , promise1 , promise2 , setTimeout
JS中分为两种任务类型: macrotask
和 microtask
,在 ECMAScript
中, microtask
称为 jobs
, macrotask
可称为 task
-
macrotask
(又称之为宏任务),可以理解是每次执行栈执行的代码就是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行)
- 每一个
task
会从头到尾将这个任务执行完毕,不会执行其它 - 浏览器为了能够使得
JS
内部task
与DOM
任务能够有序的执行,会在一个task
执行结束后,在下一个task
执行开始前,对页面进行重新渲染 (task
->渲染->task
->...)
-
microtask
(又称为微任务),可以理解是在当前task
执行结束后立即执行的任务
- 也就是说,在当前
task
任务后,下一个task
之前,在渲染之前 - 所以它的响应速度相比
setTimeout
(setTimeout
是task
)会更快,因为无需等渲染 - 也就是说,在某一个
macrotask
执行完后,就会将在它执行期间产生的所有microtask
都执行完毕(在渲染前)
分别什么样的场景会形成macrotask和microtask呢?
-
macrotask
:主代码块,setTimeout
,setInterval
等(可以看到,事件队列中的每一个事件都是一个macrotask
) -
microtask
:Promise
,process.nextTick
等
补充:在node环境下,process.nextTick的优先级高于Promise,也就是可以简单理解为:在宏任务结束后会先执行微任务队列中的nextTickQueue部分,然后才会执行微任务中的Promise部分。
总结下运行机制:
GUI JS
如图:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- JS事件循环机制
- JavaScript运行机制和事件循环
- 深入了解nodejs的事件循环机制
- js事件循环机制(event loop)
- 前端中的事件循环eventloop机制
- node端事件循环机制(Part1)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Designing for Emotion
Aarron Walter / Happy Cog / 2011-10-18 / USD 18.00
Make your users fall in love with your site via the precepts packed into this brief, charming book by MailChimp user experience design lead Aarron Walter. From classic psychology to case studies, high......一起来看看 《Designing for Emotion》 这本书的介绍吧!
MD5 加密
MD5 加密工具
XML、JSON 在线转换
在线XML、JSON转换工具