首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏橙光笔记

    任务与宏任务

    其实是通过执行的时机来区分的: 任务:在本次任务执行完后执行。 宏任务:在下一个任务循环的时候执行。 这里有一张经典的图片,供大家参考: ? 每次事件的循环的执行都是以宏任务开始的。 如果本次宏任务执行完毕了,那么就会检索是否有任务,如果有,那么就去执行任务,如果任务执行完或者没有任务的话那么就会进入下次事件循环。 第3行遇到setTimeout加入到宏任务队列中,下次处理。第16行,遇到任务process.nextTick,加入到任务的队列中。 执行下一个宏任务,也就是第3行的setTimeout,分别打印2和4,发现有2个任务,分别打印3和5。 执行下一个宏任务,也就是第27行的setTimeout,分别打印9和11,发现有2个任务,分别打印10和12。

    56131发布于 2020-10-19
  • 来自专栏腿子代码了专栏

    JS同步任务任务任务

    等等都属于同步任务,同步任务,直接在JS单线程当中执行 异步任务 异步任务,又称耗时任务,异步任务的执行浪费时间,容易造成线程的堵塞。 异步任务又分为任务与宏任务任务 其中,任务主要包括Promise.then、async/await等任务 new Promise((resolve,reject)=>{ //同步执行体 }).then(value=>{ ,代码块,所以将promise.then中的方法扔到任务队列当中等待执行,在之前输出promise1,然后接着执行最后一个同步代码打印输出script end,接着同步任务执行完毕,在将任务队列拿出来执行 ,首先执行第一个任务,async1()方法当中的async1 end,再接着执行第二个任务,Promise.then当中的Promise2,由此,所有的任务执行完毕,接着开始将宏任务队列拿出来,则执行第一个宏任务 然后在次将任务、宏任务依次拿出来执行,若是没有,则持续监听,直到有任务

    68140编辑于 2023-10-08
  • 来自专栏coding个人笔记

    JavaScript宏任务任务

    最近问了大佬一个问题,监听和定时器两个性能的问题,大佬给我普及了宏任务任务的概念,于是网上找见了这样一段代码: console.log('script start'); setTimeout(function , script end, promise1, promise2, setTimeout 于是撤出了JavaScript的执行机制,JavaScript的事件循环、同步、异步就不多说了,今天分享的是宏任务任务 先记住两个概念: 宿主环境提供的叫宏任务,由语言标准提供的叫任务,这是算比较标准也算比较好记忆的区分宏任务任务了。 宿主环境内所有的内建或自定义的变量/函数都是 global/window 这个全局对象的属性/方法,而由宿主环境提供的也叫宏任务。 语言标准: 我们都知道JavaScript是一种编程语言,但其实JavaScript由ECMA制定标准,称之为ECMAScript,所以由语言标准提供的就是任务,比如ES6提供的promise。

    49410发布于 2020-04-24
  • 来自专栏软件工程师Michael

    JavaScript进阶----宏任务任务

    JavaScript中有哪些宏任务任务呢? 事件循环的顺序,决定js代码的执行顺序进入整体代码(宏任务)后,开始第一次循环。接着执行所有的任务。 Promise(function(resolve) { console.log(3); resolve();}).then(function() { console.log(4)}) 因为以同步异步的方式来解释执行机制是不准确的,更加准确的方式是宏任务任务: 因此执行机制便为:执行宏任务 ===> 执行任务 ===> 执行另一个宏任务 ===> 不断循环 即 :在一个事件循环中,执行第一个宏任务,宏任务执行结束,执行当前事件循环中的任务,执行完毕之后进入下一个事件循环中,或者说执行下一个宏任务*/【小结】接触了宏任务任务后,可以帮助更好地理解同步与异步任务

    66460编辑于 2022-08-14
  • 来自专栏人生代码

    任务任务,队列和时间表

    为什么会这样 要了解这一点,您需要了解事件循环如何处理任务任务。第一次遇到这个问题可能会让您大吃一惊。 只要没有其他JavaScript在执行中间,任务队列就会在回调之后进行处理,并且在每个任务结束时进行处理。在任务期间排队的所有其他任务都将添加到队列的末尾并进行处理。 调度“点击”事件是一项任务。变异观察者和promise回调作为任务排队。该setTimeout回调排队的任务。 此规则来自HTML规范,用于调用回调: 如果脚本设置对象堆栈现在为空,请执行任务检查点 — HTML:在回调步骤3 之后进行清理 …并且任务检查点涉及遍历任务队列,除非我们已经在处理任务队列。 在调用每个侦听器回调之后…… 如果脚本设置对象堆栈现在为空,请执行任务检查点 — HTML:在回调步骤3 之后进行清理 以前,这意味着任务在侦听器回调之间运行,但.click()会导致事件同步分派,

    3K20发布于 2020-05-26
  • 来自专栏全沾开发(huā)

    任务、宏任务与Event-Loop

    任务、宏任务与Event-Loop 首先,JavaScript是一个单线程的脚本语言。 在同步代码执行完成后才回去检查是否有异步任务完成,并执行对应的回调,而任务又会在宏任务之前执行。 所以就得到了上述的输出结论1、2、3、4。 而这些其实就相当于注册了一个宏任务,而非是任务。 P.S. 在Promise/A+的规范中,Promise的实现可以是任务,也可以是宏任务,但是普遍的共识表示(至少Chrome是这么做的),Promise应该是属于任务阵营的 所以,明白哪些操作是宏任务、哪些是任务就变得很关键 在执行完同步代码与任务以后,这时继续向后查找有木有宏任务

    88620发布于 2019-12-09
  • 来自专栏lonelydawn的前端猿区

    JS 事件循环、任务和宏任务

    任务和宏任务的执行顺序 在同一次循环中,任务比宏任务优先执行,任务按照推入队列的顺序执行(FIFO)。 在处理任务和宏任务互相包含的情况,记住两点: 任务不参与事件循环,任务会被推到当前循环对应的任务队列中,即使是任务中的任务。 宏任务将开启新的事件循环。 如果宏任务中包含任务,这个任务会被带到下一次循环中执行。 下面几道题: Tick: (h1, h2(w1, w2), w3) Tick: (w1(w2(w3)), w4) Tick: (w1(h1(w2)), w3(w4)) h 表示宏任务,w 表示任务,求解运行顺序 Tick: (h1, h2(w1, w2), w3) let results = [] function microTask (name, callback) { // 任务 new Promise

    1.9K20发布于 2021-09-26
  • 来自专栏程序技术知识

    js 同步异步,宏任务任务

    同步任务 同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务; const num1 = 1; const num2 = 2; const num3 = 3; console.log 宏任务任务 实际上异步任务之间并不相同,因此他们之间也有优先级之分,所以任务队列被分成两种类型: 宏任务任务。 ,然后检查"任务队列"中是否有任务,如果有,就将第一个事件对应的回调,推到执行栈中执行; ==注意:==异步任务分宏任务任务两种类型,任务比宏任务的执行时间要早,所以会优先把所有的任务放到执行栈中执行 在执行任何一个宏任务以前(不是队列,是一个宏任务),都会查看任务队列是否有任务需要清空,也就是宏任务执行以前,必须保证任务是空的。 所以从上面的代码例子中可以得出: 先把同步任务执行,得到 1,5, 然后依次执行任务(Promise),得到 2, 4,最后执行宏任务(setTimeout),得到3, 7。

    1.7K40编辑于 2022-05-12
  • 来自专栏前端开发面试

    说说Event Loop事件循环、任务、宏任务

    任务、宏任务概念介绍任务与宏任务就属于js代码的范畴js代码主要分为两大类: 同步代码、异步代码异步代码又分为:任务与宏任务图片3. 事件循环Event Loop执行机制1.进入到script标签,就进入到了第一次事件循环.2.遇到同步代码,立即执行3.遇到宏任务,放入到宏任务队列里.4.遇到任务,放入到任务队列里.5.执行完所有同步代码 任务分析图片(3). script标签本身是一个宏任务, 当页面出现多个script标签的时候,浏览器会把script标签作为宏任务来解析图片看到这里,对事件循环应该有所了解了,给大家看几道面试题。 3.执行主线程上的log(6)4.执行第4行至第6行的任务二.图片1.先执行主线程上的1,5,72.主线程的同步任务执行完毕后,会先执行任务。 再依次执行第6行和第17行的两个任务,打印3和97.任务执⾏结束,开始执⾏宏任务setTimeout,打印11⾏的6.总结所有同步任务都在主线程上执行,形成一个执行栈(call stack)。

    1.3K31编辑于 2022-12-14
  • 来自专栏九旬大爷

    JS事件循环之宏任务任务

    :先执行一个宏任务,执行过程中如果产出新的宏/任务,就将他们推入相应的任务队列,之后在执行一队任务,之后再执行宏任务,如此循环。 ,当前任务队列(promise1) 输出:script end 任务:执行任务队列(promise1) 输出:promise1,then 之后产生一个任务,加入微任务队列,当前任务队列(promise2 输出script end 宏任务第一个执行结束 当前任务队列:任务[then1],宏任务[timeou1, timeout2] 任务: 执行 then1,输出then1 任务队列清空 当前任务队列 :任务[],宏任务[timeou1, timeout2] 宏任务: 输出timeout1 输出timeout2 当前任务队列:任务[],宏任务[timeou2] 任务: 为空跳过 当前任务队列:任务 ],宏任务[timeout] 任务: 输出:promise2 promise2 出队 输出:async1 end async1 end 出队 任务队列清空 当前任务队列:任务[],宏任务[timeout

    1.4K10发布于 2020-10-23
  • 来自专栏娜姐聊前端

    任务任务到底是什么?

    那么,你能说清楚到底宏任务任务是什么?是谁发起的?为什么任务的执行要先于宏任务呢? 首先,我们需要先知道JS运行机制。 概念5:宏任务任务 ES6 规范中,microtask 称为 jobs,macrotask 称为 task 宏任务是由宿主发起的,而任务由JavaScript自身发起。 在ES3以及以前的版本中,JavaScript本身没有发起异步请求的能力,也就没有任务的存在。 “下次DOM更新周期”的意思就是下次任务执行时更新DOM,而vm.$nextTick就是将回调函数添加到任务中(在特殊情况下会降级为宏任务)。 因为任务优先级太高,Vue 2.4版本之后,提供了强制使用宏任务的方法。 vm.$nextTick优先使用Promise,创建任务

    5.3K52发布于 2020-09-22
  • 来自专栏人生得意须尽欢

    任务任务代码的执行顺序

    接下来,讲讲那些门道(宏任务任务)。 3、宏任务任务 每个人的理解方式不同,因为宏任务任务并不是标准,但执行的顺序在js中是大一统了的。 ){ console.log('2');//同步主线程 resolve(); }).then(function(){//任务 console.log('3') }); console.log ('4')//同步主线程 2:同步中的第一个,故第一 4:同步中的第二个,故第二 3:异步中的任务,故第三 1:异步中的宏任务,故第二 因此:2,4,3,1的结果就出来了! ) 宏任务队列1:=>         console.log('1')         console.log('3')         console.log('4')//宏任务中的任务         2:console.log(3)         宏任务队列1中的任务:console.log(4)         宏任务队列3:因他是宏任务队列1中的宏任务,所以被丢进了任务队列最后,我们先看宏任务队列

    3.2K11发布于 2021-09-24
  • 来自专栏前端杂货铺-Gopal

    【JavaScript】图解事件循环:任务和宏任务

    除了本章中所讲的 宏任务(macrotask) 外,还有在 任务队列[2] 一章中提到的 任务(microtask)。 任务仅来自于我们的代码。它们通常是由 promise 创建的:对 .then/catch/finally 处理程序的执行会成为任务。 更详细的事件循环图示如下(顺序是从上到下,即:首先是脚本,然后是任务,渲染等): 任务会在执行任何其他事件处理,或渲染,或执行任何其他宏任务之前完成。 执行所有 任务: 出队(dequeue)并执行最早的任务。 当任务队列非空时: 执行渲染,如果有。 如果宏任务队列为空,则休眠直到出现宏任务。 转到步骤 1。 安排一个新的 任务: 使用 queueMicrotask(f)。 promise 处理程序也会通过任务队列。 在任务之间没有 UI 或网络事件的处理:它们一个立即接一个地执行。

    1.6K10编辑于 2022-08-01
  • 来自专栏bug收集

    【春节日更】快速理解宏任务任务

    任务主要是:Promise、Object.observe、MutationObserver。 宏任务任务之间的关系 宏任务任务的区别 宏任务 1. 宏任务所处的队列就是宏任务队列 2. 宏任务队列可以有多个 3. 当宏任务队列的中的任务全部执行完以后会查看是否有任务队列如果有先执行任务队列中的所有任务,如果没有就查看是否有宏任务队列 任务 1. 任务所处的队列就是任务队列 2. 只有一个任务队列 3. 在上一个宏任务队列执行完毕后如果有任务队列就会执行任务队列中的所有任务 总结: 首先浏览器执行js进入主线程, 然后再判断是否有任务,有就执行; 再判断是否有宏任务,有进行执行,执行后,再判断是否有任务

    3.4K10编辑于 2022-07-22
  • 来自专栏vivo互联网技术

    任务任务的一个小事

    而无论是宏任务还是任务依赖的都是基础的执行栈和消息队列的机制而运行。根据定义,宏任务任务存在于不同的任务队列,而任务任务队列应该在宏任务执行栈完成前清空。 此时当前已没有主逻辑执行的代码,而当前宏任务将执行结束,任务会在当前宏任务完成前执行,所以任务队列会依次执行,直到任务队列清空。 虽然Nodejs的事件循环有不同于浏览器的六个阶段,但是按照定义规范,这里的宏任务任务执行,明显没有遵循任务区分差别的第二点,也就是任务必须在宏任务执行结束前执行。 从一开始浏览器端就是严格遵循了任务和宏任务定义进行执行,也就是说,一个宏任务执行完成过程中,就会去检测任务队列是否有需要执行的任务,即使是任务嵌套任务,也会将任务执行完成,再去执行下一个宏任务 任务嵌套任务可能造成线程中一直处于当前任务队列执行状态而走不下去,而宏任务的嵌套循环执行,并不会造成内存溢出的问题,因为每个宏任务的执行都是新建的栈。

    1.5K40发布于 2020-10-14
  • 来自专栏大数据进阶

    storm(3)-任务提交

    本地模式其实其实使用的是127.0.0.1,如果在storm集群上,借助storm jar则使用的是storm.yaml中的配置

    66220发布于 2019-09-17
  • 来自专栏前端杂货铺-Gopal

    【JavaScript】 事件循环 —— 任务 Microtask

    任务(Microtask) Promise 的处理程序(handlers).then、.catch 和 .finally 都是异步的。 任务队列(Microtask queue) 异步任务需要适当的管理。 如果一个 promise 的 error 未被在任务队列的末尾进行处理,则会出现“未处理的 rejection”。 由于这些概念跟 promise 没有直接关系,所以我们将在 图解 JavaScript 事件循环:任务和宏任务 一文中对它们进行介绍。 ecma262/#sec-jobs-and-job-queues [2]使用 promise 进行错误处理: https://zh.javascript.info/promise-error-handling [3]

    82410编辑于 2022-08-01
  • 来自专栏高端IT

    Event Loop我知道,宏任务任务是什么鬼?

    在介绍宏任务任务之前,先抛出一个问题。 ) }); console.log(‘4’); 请说出控制台打印的数据,很多小伙伴经过深思熟虑之后,会自信的说出答案:2、4、1、3。 但是事情并不是那么的简单,接下来引入两个新概念:宏任务(macrotask)和任务(microtask) 宏任务(macrotask)和任务(microtask) 宏任务任务表示的是异步任务的两种分类 然后首先会从宏任务任务队列中中取出一条任务执行;当执行完毕之后再将任务队列里面的所有的任务按照顺序执行;当所有的任务队列任务执行完毕之后,再去宏任务队列中取出一条任务执行。 那么宏任务任务到底是什么关系呢?

    34810编辑于 2022-04-08
  • 来自专栏前端小叙

    js 事件循环中宏任务任务执行顺序

    async2(); console.log("async1 end"); // 6 } async function async2() { console.log("async2"); // 3

    1.8K40编辑于 2022-11-21
  • 来自专栏前端开发面试

    面试官:说说Event Loop事件循环、任务、宏任务

    任务、宏任务概念介绍任务与宏任务就属于js代码的范畴js代码主要分为两大类: 同步代码、异步代码异步代码又分为:任务与宏任务图片3. 3.执行主线程上的log(6)4.执行第4行至第6行的任务二.图片1.先执行主线程上的1,5,72.主线程的同步任务执行完毕后,会先执行任务。 再依次执行第6行和第17行的两个任务,打印3和97.任务执⾏结束,开始执⾏宏任务setTimeout,打印11⾏的6.总结所有同步任务都在主线程上执行,形成一个执行栈(call stack)。 任务、宏任务概念介绍任务与宏任务就属于js代码的范畴js代码主要分为两大类: 同步代码、异步代码异步代码又分为:任务与宏任务图片3. 3.执行主线程上的log(6)4.执行第4行至第6行的任务二.图片1.先执行主线程上的1,5,72.主线程的同步任务执行完毕后,会先执行任务

    1.3K40编辑于 2022-11-15
领券