queue-microtask

中文文档
1.2.3发布于 2021/03/22MITCommonJS零依赖近 30 天下载 5亿

快,小 queueMicrotask 现代发动机的垫片

中文使用文档
文档目录12 节
  1. 快,小 queueMicrotask 现代发动机的垫片
  2. 安装
  3. 用法
  4. 是什么 queueMicrotask 为什么要用它呢?
  5. 这个包裹是给谁的?
  6. 为什么不用呢? process.nextTick ?
  7. 为什么不用呢? setTimeout(fn, 0) ?
  8. 为什么不使用类似的微任务库呢 immediate 或 asap ?
  9. 什么是衬垫?
  10. API
  11. queueMicrotask(fn)
  12. 许可证

queue-microtask ci npm downloads javascript style guide

快,小 queueMicrotask 现代发动机的垫片

  • 使用 queueMicrotask 在所有现代JS引擎中。
  • 没有依赖关系。少于10行。没有垫片或复杂的后撤。
  • 在所有现代环境中的最佳性能
    • 使用 queueMicrotask 在现代环境中
    • 回退到 Promise.resolve().then(fn) 在Node.js 10及更早版本中,以及旧的浏览器(性能与 queueMicrotask)

安装

npm install queue-microtask

用法

const queueMicrotask = require('queue-microtask')

queueMicrotask(() => { /* this will run soon */ })

是什么 queueMicrotask 为什么要用它呢?

这个 queueMicrotask 函数是WHATWG标准。在控制返回事件循环之前,它将一个待执行的微任务排在队列中。

微任务是一个短函数,它将在当前任务完成其工作之后运行,并且在执行上下文的控制返回给事件循环之前没有其他代码等待运行。

的代码 queueMicrotask(fn) 是否等同于代码 Promise.resolve().then(fn). 它也非常类似于 process.nextTick(fn) 在节点。

使用微任务可以让代码在运行时不干扰任何其他可能更高优先级的挂起代码,但要在JS引擎重新获得对执行上下文的控制之前。

看到 规范 或 节点的文档 了解更多信息。

这个包裹是给谁的?

此包允许您使用 queueMicrotask 安全地在所有现代JS引擎。如果你优先考虑小JS包的大小而不是对旧浏览器的支持,可以使用它。

如果您只需要支持Node 12及更高版本,请使用 queueMicrotask 直接。如果需要支持所有版本的Node,请使用此包。

为什么不用呢? process.nextTick?

在节点, queueMicrotask 和 process.nextTick 是 本质上是相同的,尽管有 细微的差别 在大多数情况下,这并不重要。

你可以想到 queueMicrotask 的标准版本 process.nextTick 这在浏览器中是有效的。不需要依赖浏览器绑定器来加载 process 用于浏览器环境。

为什么不用呢? setTimeout(fn, 0)?

这种方法是最兼容的,但它有问题。现代浏览器严重限制了计时器,所以 setTimeout(…, 0) 通常运行至少需要4毫秒。此外,如果页面是后台的,节流会变得更糟。如果你有很多 setTimeout 调用,那么这会严重限制程序的性能。

为什么不使用类似的微任务库呢 immediate 或 asap?

这些包裹太棒了!然而,如果你在旧浏览器中优先考虑小JS包的大小而不是最佳性能,那么你可能会考虑使用这个包。

这个包裹(queue-microtask)比……小四倍 immediate的两倍小 asap,是使用的两倍 process.nextTick 并让浏览器捆绑器自动加载它。

注意:这个包会在JS环境中抛出一个异常 Promise 这通常是非常旧的浏览器和Node.js版本。

自 queueMicrotask API支持Node.js、Chrome、Firefox、Safari、Opera和Edge; 绝大多数用户将获得最佳性能. 任何JS环境 Promise,这几乎是所有的,也得到了最佳的性能。如果你需要支持JS环境中所缺乏的 Promise 支持,使用替代包之一。

什么是衬垫?

在计算机编程中,shim是一个库,它透明地拦截API调用并更改传递的参数,处理操作本身或将操作重定向到其他地方。– 维基百科

这个包也可以被描述为一个“小马填充”。

一个小马填充几乎相同的polyfill,但不完全相同。而不是修补旧浏览器的功能,一个小马填充提供的功能作为一个独立的模块,你可以使用。– PonyFoo

API

queueMicrotask(fn)

这个 queueMicrotask() 方法为微任务排队。

这个 fn 参数是一个函数,在所有挂起的任务完成之后,在将控制权交给浏览器的事件循环之前执行。

许可证

麻省理工学院。版权(c) Feross Aboukhadijeh。

版本与发布记录

queue-microtask 共发布 11 个版本,首次发布于 2019/09/08;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.2.3latest2021/03/225 年前
1.2.22020/11/245 年前
1.2.12020/11/195 年前
1.2.02020/10/246 年前
1.1.42020/07/216 年前
1.1.32020/06/066 年前

关于 queue-microtask 的常见问题

queue-microtask 是什么?

快,小 queueMicrotask 现代发动机的垫片

如何安装 queue-microtask?

在项目目录运行 npm install queue-microtask,或使用 pnpm add / yarn add / bun add。

queue-microtask 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/queue-microtask 是否存在。

queue-microtask 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

queue-microtask 可以商用吗?

queue-microtask 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

queue-microtask 的下载量有多少?

根据 npm 官方下载统计,queue-microtask 在 2026/10/05 – 2026/11/03 这 30 天内被下载 504,836,549 次,日均约 16,827,885 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

queue-microtask 还在维护吗?

最新版本 1.2.3 发布于 2021/03/22(5 年前);至今共发布 11 个版本,其中过去 12 个月发布了 0 个;首次发布于 2019/09/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。