首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    setImmediate() vs setTimeout() 在 JavaScript 中的区别

    JavaScript 的异步特性 JavaScript 以其非阻塞、异步行为而闻名,尤其是在 Node.js 环境中。...这不仅仅是 JavaScript 的一个怪癖;它与 Node.js 如何管理异步任务密切相关。...事件循环 要理解这一点,我们需要快速了解 Node.js 如何管理异步操作。Node.js 的异步特性核心是事件循环。 在 Node.js 中,事件循环处理不同的阶段,每个阶段负责执行某些类型的回调。...事件循环的工作原理 要理解 setTimeout() 和 setImmediate() 的工作原理,我们需要看看 Node.js 中的事件循环。事件循环允许 Node.js 处理异步代码。...Node.js 的异步行为有时可能会令人困惑,特别是在处理 setTimeout() 和 setImmediate() 时。关键是理解事件循环以及任务在不同阶段的调度方式。

    10210

    nodejs的setTimeout(fn,0)和setImmediate谁先执行的问题

    我们首先看一下下面这段代码 setTimeout(()=>{ console.log('setTimeout'); },0) setImmediate(()=>{ console.log('setImmedate...setTimeout是属于定时器阶段,setImmediate是属于check阶段。顺序上定时器阶段是比check更早被执行的。...在分析nodejs的setImmediate和setTimeout的文章中已经介绍过这两个函数对应的实现原理。这里就不细说了。其中setTimeout的实现代码里有一个很重要的细节。...nodejs启动的时候,会编译执行上面的代码,开始一个定时器,挂载一个setImmediate节点在队列。...这时候就会执行setImmediate的回调。所以,一开始的那段代码的输出结果是取决于启动定时器的时间到libuv执行定时器阶段是否过去了1毫秒。

    1.5K20

    setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop

    JS异步是怎么实现的 我们都知道JS是单线程的,那单线程是怎么实现异步的呢?事实上所谓的"JS是单线程的"只是指JS的主运行线程只有一个,而不是整个运行环境都是单线程。...JS引擎线程 这个线程就是负责执行JS的主线程,前面说的"JS是单线程的"就是指的这个线程。大名鼎鼎的Chrome V8引擎就是在这个线程运行的。需要注意的是,这个线程跟GUI线程是互斥的。...互斥的原因是JS也可以操作DOM,如果JS线程和GUI线程同时操作DOM,结果就混乱了,不知道到底渲染哪个结果。这带来的后果就是如果JS长时间运行,GUI线程就不能执行,整个页面就感觉卡死了。...Event Loop 所谓Event Loop,就是事件循环,其实就是JS管理事件执行的一个流程,具体的管理办法由他具体的运行环境确定。目前JS的主要运行环境有两个,浏览器和Node.js。...常见宏任务有: script (可以理解为外层同步代码) setTimeout/setInterval setImmediate(Node.js) I/O UI事件 postMessage 常见微任务有

    1K41

    到底什么是Event Loop?那就来了解一下JavaScript分别在浏览器和Node环境下的运行机制吧

    那当然是JS所处的运行环境提供的了,而JS最主要的两个运行环境就是:浏览器 和 Node,我们接下来也会基于这两个运行环境,对JS的运行机制进行讲解 二、浏览器中的JavaScript 之所以JS能在浏览器中运行...三、Node.js中的JavaScript 注: 此次讨论的都是针对Node.js 11.x以上的版本 本文分别讨论了JS在浏览器环境和Node.js环境这两种情况,那自然是有所区别的,后者相对于前者的过程分得更加细致...名称 举例(常用) 宏任务 setTimeout 、setInterval 、setImmediate 微任务 Promise 、process.nextTick 可以看到,在Node.js对比浏览器多了两个任务...,分别是宏任务 setImmediate 和 微任务 process.nextTick setImmediate 会在 check 阶段被处理 process.nextTick 是Node.js中一个特殊的微任务...('setImmediate'); }) 我们用node运行该段代码多次,发现得到了如下两种结果: // 第一种结果 setTimeout setImmediate // 第二种结果 setImmediate

    72300

    JavaScript定时器与执行机制详细介绍

    JS执行机制 浏览器(或者说JS引擎)执行JS的机制是基于事件循环。 由于JS是单线程,所以同一时间只能执行一个任务,其他任务就得排队,后续任务必须等到前一个任务结束才能开始执行。...为了避免因为某些长时间任务造成的无意义等待,JS引入了异步的概念,用另一个线程来管理异步任务。 ? 同步任务直接在主线程队列中顺序执行,而异步任务会进入另一个任务队列,不会阻塞主线程。...JS定时器 JS的定时器目前有三个:setTimeout、setInterval和setImmediate。...而且Promise的延迟比setImmediate更低,意味着Promise比setImmediate先执行。...可以肯定的是,在各JS环境中,Promise都是最先执行的,setTimeout(0)、setImmediate和requestAnimationFrame顺序不确定。

    1.1K10

    宏任务和微任务到底是什么?

    首先,我们需要先知道JS运行机制。 JS运行机制 概念1: JS是单线程执行 ”JS是单线程的”指的是JS 引擎线程。 在浏览器环境中,有JS 引擎线程和渲染线程,且两个线程互斥。...概念4:Event Loop JS到底是怎么运行的呢? ? image JS引擎常驻于内存中,等待宿主将JS代码或函数传递给它。...UI rendering/UI事件4. postMessage,MessageChannel5. setImmediate,I/O(Node.js) 1. Promise2....setImmediate和process.nextTick为Node环境下常用的方法(IE11支持setImmediate),所以,后续的分析都基于Node宿主。...setImmediate'); }); 其执行顺序为: 遇到setTimeout,虽然设置的是0毫秒触发,但是被node.js强制改为1毫秒,塞入times阶段 遇到setImmediate塞入check

    5K52

    JS 事件循环 Node 篇

    JS 事件循环 Node 篇 之前介绍过浏览器中的事件循环,本文将详细介绍 Node 中的事件循环。...根据 Node.js 官方介绍,每次事件循环都包含了6个阶段,如下图所示 image-20220404145555012 「注意」:每个框被称为事件循环机制的一个阶段。...Node.js 与浏览器的 Event Loop 差异 浏览器环境下,microtask的任务队列是每个macrotask执行完之后执行。...浏览器端 而在Node.js中,microtask会在事件循环的各个阶段之间执行,也就是一个阶段执行完毕,就会去执行microtask队列的任务。...总结 Node.js 的事件循环分为6个阶段 浏览器和Node 环境下,microtask任务队列的执行时机不同 Node.js中,microtask 在事件循环的各个阶段之间执行 浏览器端,microtask

    2.2K10

    多图生动详解浏览器与Node环境下的Event Loop

    那当然是JS所处的运行环境提供的了,而JS最主要的两个运行环境就是:浏览器 和 Node,我们接下来也会基于这两个运行环境,对JS的运行机制进行讲解 二、浏览器中的JavaScript 之所以JS能在浏览器中运行...三、Node.js中的JavaScript 注: 此次讨论的都是针对Node.js 11.x以上的版本 本文分别讨论了JS在浏览器环境和Node.js环境这两种情况,那自然是有所区别的,后者相对于前者的过程分得更加细致...(1)node中的Event Loop 我们来看一张Node.js的 Event Loop 简图 Node.js的Event Loop 是基于libuv实现的 通过 Node.js 的官方文档可以得知...名称 举例(常用) 宏任务 setTimeout 、setInterval 、setImmediate 微任务 Promise 、process.nextTick 可以看到,在Node.js对比浏览器多了两个任务...,分别是宏任务 setImmediate 和 微任务 process.nextTick setImmediate 会在 check 阶段被处理 process.nextTick 是Node.js中一个特殊的微任务

    67920

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券