vue中事件循环,任务队列

vue中事件循环

一个事件循环可以想象成游戏里面的一个时间片或者帧,在一个事件循环中会执行一系列的任务和渲染画面。可以用一个图生动的描述这个循环

在这里插入图片描述

执行同步代码块,遇到异步操作,就把异步操作丢到对应的队列中等待;其中Promise 的回调函数、MutationObserver 的回调函数、process.nextTick 的回调函数以及 Vue 提供的 $nextTick 方法的回调函数放到微队列

同步中更改数据,调用set,执行dep.notify,触发watcher执行updateComponent,但是并不是马上
执行,而是调用queueWatcher把这个watcher放进异步更新队列
当这个更新队列的waiting标志挂下,则调用next-tick将flushSchedulerQueue(run watcher)
这个next-tick就是利用微任务,把更新的操作进微任务队列,这样数据更新操作会进行缓存,比如多次更新统一数据,并不会造成多次渲染而是把多次更新合成一次(根据watcher的id进行筛选或者多次操作一次执行),提高性能。放进微任务的好处:既实现了缓存操作(异步队列),
又能够在渲染队列之前更新dom,不会把更新操作推迟到太晚

用户调用next-tick,实际上是和上面重合的,回调被放进微队列,只是用户的next-tick必然是在
更新操作之后的,这也是为什么next-tick能拿到最新的dom的原因

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperHaker~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值