美文网首页
用宏任务和微任务实现 nextTick 的区别

用宏任务和微任务实现 nextTick 的区别

作者: 苍老师的眼泪 | 来源:发表于2022-04-18 04:52 被阅读0次

在一轮事件循环中:
执行宏任务 => 执行微任务 => 执行 UI Rendering ... 下一轮事件循环。。。

微任务(Promise.then)实现: js 操作dom 之后,微任务开始执行,此时 UI还没渲染,但是没有关系,它迟早要渲染的,因为我们已经更新 dom 了,此时获取 dom 的数据也是更新后的数据。
宏任务(setTimeout)实现:创建一个新的 task 并加入事件队列的末尾,操作 dom 的任务和到该宏任务直接可能间隔了多个宏任务。

区别:宏任务执行完毕之后会执行所有微任务, 微任务在与更新数据的操作的同一轮事件循环中执行,而宏任务则是再下一轮事件循环执行

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    .a {
      background-color: coral;
      height: 100px;
    }
  </style>
  <script src="vue.min.js"></script>
</head>

<body>
  <div id="app">
    <div class="a" @click="change" :style="{ width: w + 'px' }">

    </div>
  </div>

  <script>
    let app = new Vue({
      el: '#app',
      data: {
        w: 100
      },
      methods: {
        change() {
          this.w += 100


          let method = 1

          if (method == 1) {

            // 微任务形式
            Promise.resolve().then(() => {
              alert('页面更新了么')
              console.log(document.querySelector('.a').clientWidth)
            })

          } else if (method == 2) {

            // 宏任务形式
            setTimeout(() => {
              alert('页面更新了么')
              console.log(document.querySelector('.a').clientWidth)
            })

          }

        }
      }
    })
  </script>
</body>

</html>

相关文章

  • 用宏任务和微任务实现 nextTick 的区别

    在一轮事件循环中:执行宏任务 => 执行微任务 => 执行 UI Rendering ... 下一轮事件循环。。。...

  • Event Loop

    宏任务:setTImeout、setInterval微任务:Promise、process.nextTick(ca...

  • 5.nextTick 实现原理

    理解: nextTick 方法主要是使用了宏任务和微任务,定义了一个异步方法,多次调用 nextTick会将方法存...

  • 浏览器的事件机制-Eventloop

    循环机制前,我们先要会区分:宏任务与微任务 宏任务Task与微任务Microtask JS中的宏任务和微任务的区别...

  • 微任务和宏任务的区别

    微任务和宏任务 宏任务:当前调用栈中执行的代码成为宏任务。(主代码快,定时器等等)。 2.微任务: 当前(此次事件...

  • js中的异步任务:宏任务、微任务

    js的异步任务分2类:宏任务(macrotask )和微任务(microtask ) 什么是宏任务、微任务 网上用...

  • 📕 事件循环 宏任务 微任务

    执行顺序:1. 同步程序2. process.nextTick3. 微任务: promise.then4. 宏任务...

  • 微任务和宏任务@小四@王云飞

    微任务和宏任务 微任务 和 宏任务 表示异步任务的两种分类。 微任务(microtask)和宏任务(macrota...

  • 宏任务和微任务

    [js 宏任务和微任务] .宏任务(macrotask )和微任务(microtask ) macrotask 和...

  • 宏任务 和 微任务

    宏任务: 当前调用栈执行的代码成为宏任务,(主代码块和定时器)也或者宿主环境提供的叫宏任务 这些任务包括: 渲染事...

网友评论

      本文标题:用宏任务和微任务实现 nextTick 的区别

      本文链接:https://www.haomeiwen.com/subject/fgvrertx.html