# queue-microtask 中文文档

规范地址：https://npmcn.com/package/queue-microtask/

版本：1\.2\.3
npm 元数据更新时间：2023-06-22T16:33:42.516Z
中文译文更新时间：2026-11-05T04:51:31.435Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/queue-microtask
原文对照：https://npmcn.com/package/queue-microtask/?lang=original
项目主页：https://github.com/feross/queue-microtask
源码仓库：https://github.com/feross/queue-microtask

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：8.4 kB，5 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2019-09-07T20:24:51.247Z
- 最新版本发布：2021-03-22T05:37:10.418Z
- 近 30 天下载量：504836549（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：11（近 12 个月 0 个）

## 中文简介

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

## 安装

```sh
npm install queue-microtask
```

也可以使用：`pnpm add queue-microtask`、`yarn add queue-microtask`、`bun add queue-microtask`

## README

# queue-microtask [![ci](https://img.shields.io/github/workflow/status/feross/queue-microtask/ci/master)](https://github.com/feross/queue-microtask/actions) [![npm](https://img.shields.io/npm/v/queue-microtask.svg)](https://npmjs.org/package/queue-microtask) [![downloads](https://img.shields.io/npm/dm/queue-microtask.svg)](https://npmjs.org/package/queue-microtask) [![javascript style guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com/)

### 快,小 [`queueMicrotask`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask) 现代发动机的垫片

-   使用 [`queueMicrotask`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/queueMicrotask) 在所有现代JS引擎中。
-   没有依赖关系。少于10行。没有垫片或复杂的后撤。
-   在所有现代环境中的最佳性能
    -   使用 `queueMicrotask` 在现代环境中
    -   回退到 `Promise.resolve().then(fn)` 在Node.js 10及更早版本中，以及旧的浏览器(性能与 `queueMicrotask`）

## 安装

```
npm install queue-microtask
```

## 用法

```js
const queueMicrotask = require('queue-microtask')

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

## 是什么 `queueMicrotask` 为什么要用它呢？

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

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

的代码 `queueMicrotask(fn)` 是否等同于代码 `Promise.resolve().then(fn)`． 它也非常类似于 [`process.nextTick(fn)`](https://nodejs.org/api/process.html#process_process_nexttick_callback_args) 在节点。

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

看到 [规范](https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#microtask-queuing) 或 [节点的文档](https://nodejs.org/api/globals.html#globals_queuemicrotask_callback) 了解更多信息。

## 这个包裹是给谁的？

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

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

## 为什么不用呢？ `process.nextTick`？

在节点, `queueMicrotask` 和 `process.nextTick` 是 [本质上是相同的](https://nodejs.org/api/globals.html#globals_queuemicrotask_callback)，尽管有 [细微的差别](https://github.com/YuzuJS/setImmediate#macrotasks-and-microtasks) 在大多数情况下，这并不重要。

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

## 为什么不用呢？ `setTimeout(fn, 0)`？

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

## 为什么不使用类似的微任务库呢 [`immediate`](https://www.npmjs.com/package/immediate) 或 [`asap`](https://www.npmjs.com/package/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调用并更改传递的参数，处理操作本身或将操作重定向到其他地方。– [维基百科](https://en.wikipedia.org/wiki/Shim_\(computing\))

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

> 一个小马填充几乎相同的polyfill，但不完全相同。而不是修补旧浏览器的功能，一个小马填充提供的功能作为一个独立的模块，你可以使用。– [PonyFoo](https://ponyfoo.com/articles/polyfills-or-ponyfills)

## API

### `queueMicrotask(fn)`

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

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

## 许可证

麻省理工学院。版权(c) [Feross Aboukhadijeh](https://feross.org/)。

## 常见问题

### 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 和提交记录判断。

