最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • JS中Event Loop

    正文概述 掘金(前端妹纸一枚)   2021-07-17   524

    Event Loop

    JS中任务分为同步任务和异步任务

    同步任务:在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务

    异步任务:不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行(鼠标点击、键盘事件、httpq请求、setTimeOut)

    具体执行流程:

    1. 所有同步任务都在主线程上执行,形成一个执行栈
    2. 主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
    3. 一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
    4. 主线程不断重复上面的第三步。

    主线程从"任务队列"中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为Event Loop(事件循环)

    不管是setTimeout/setIntervalXHR/fetch代码,在这些代码执行时, 本身是同步任务,而其中的回调函数才是异步任务,才会进入到任务队列中

    JS中Event Loop

    宏任务、微任务

    宏任务

    我们可以将每次执行栈执行的代码当做是一个宏任务(包括每次从事件队列中获取一个事件回调并放到执行栈中执行), 每一个宏任务会从头到尾执行完毕,不会执行其他

    JS中Event Loop

    微任务

    微任务仅来自于我们的代码。它们通常是由 promise 创建的:对 .then/catch/finally 处理程序的执行会成为微任务。微任务也被用于 await 的“幕后”,因为它是 promise 处理的另一种形式

    JS中Event Loop

    • 执行一个宏任务(栈中没有就从事件队列中获取)

    • 执行过程中如果遇到微任务,就将它添加到微任务的任务队列中

    • 宏任务执行完毕后,立即执行当前微任务队列中的所有微任务(依次执行)

    • 当前宏任务执行完毕,开始检查渲染,然后GUI线程接管渲染

    • 渲染完毕后,JS线程继续接管,开始下一个宏任务(从事件队列中获取)

    JS中Event Loop

    参考

    「前端进阶」从多线程到Event Loop全面梳理

    JavaScript 运行机制详解:再谈Event Loop

    事件循环:微任务和宏任务


    起源地下载网 » JS中Event Loop

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元