nextTick setImmediate setTimeout(fn, 0)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nextTick setImmediate setTimeout(fn, 0)相关的知识,希望对你有一定的参考价值。

  • setImmediate()属于check观察者,其设置的回调函数,会插入到下次事件循环的末尾。

  • process.nextTick()设置的回调函数,会在代码运行完成后立即执行,会在下次事件循环之前被调用,原文是 “the callback will fire as soon as the code runs to completion, but before going back to the event loop.”

  • process.nextTick()所设置的回调函数会存放到数组中,一次性执行所有回调函数。

  • setImmediate()所设置的回调函数会存到到链表中,每次事件循环只执行链表中的一个回调函数。

 

Node.js的特点是事件循环,其中不同的事件会分配到不同的事件观察者身上,比如idle观察者,check观察者,I/O观察者等等,事件循环每次循环称为一次Tick,每次Tick按照先后顺序从事件观察者中取出事件进行处理。

 process.nextTick()属于idle观察者, setImediate() 属于check观察者。在每一个轮询环检查中,idle观察者先于I/O观察者,I/O观察者先于check观察者。

 

setTimeout(fn, 0)  的方式比较浪费性能,(setTimeout的创建要涉及到创建红黑树等性能消耗), 用setImmediate()和process.nextTick()的操作相对比较轻量

以上是关于nextTick setImmediate setTimeout(fn, 0)的主要内容,如果未能解决你的问题,请参考以下文章

this.$nextTick()

vue中$nextTick()

nextTick 原理解析

$nextTick 宏任务 微任务 macrotasks microtasks

setImmediate vs. nextTick

详解Vue中的nextTick