# setimmediate 中文文档

规范地址：https://npmcn.com/package/setimmediate/

版本：1\.0\.5
npm 元数据更新时间：2022-06-26T18:20:58.020Z
中文译文更新时间：2026-11-05T16:07:50.530Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/setimmediate
原文对照：https://npmcn.com/package/setimmediate/?lang=original
项目主页：https://github.com/yuzujs/setImmediate#readme
源码仓库：https://github.com/yuzujs/setImmediate

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

- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：0 个
- 首次发布：2012-12-31T01:50:42.047Z
- 最新版本发布：2016-09-12T00:59:56.656Z
- 近 30 天下载量：280755622（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：6（近 12 个月 0 个）

## 中文简介

一个 shim 的 set 即时高效脚本生成 API

## 安装

```sh
npm install setimmediate
```

也可以使用：`pnpm add setimmediate`、`yarn add setimmediate`、`bun add setimmediate`

## README

# 即时设置.js

**一份YuzuJS的制作**

## 导言

**即时设置.js** 高度交叉浏览器 `setImmediate` 财务报告和审定财务报表 `clearImmediate` APIs, (英语), [拟议](https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/setImmediate/Overview.html) 由微软提交网络性能工作组. `setImmediate` 允许脚本向浏览器屈服,同步执行给定的操作,其方式通常效率更高,消耗的功率也比通常低 `setTimeout(..., 0)` 模式.

setImmediate.js在以下浏览器和环境中以“全速”运行,使用各种巧妙的技巧:

-   互联网探索者 6+
-   Firefox 3+ (英语)
-   网络Kit
-   歌剧院 9.5+
-   节点.js
-   支持浏览器中的网络工人 `MessageChannel`我找不到可靠的线索.

在所有其他浏览器中,我们回到使用 `setTimeout`因此,它总是安全的使用.

## 宏任务和微任务

这个 `setImmediate` API,按照规定,允许您进入环境 [任务队列](http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#task-queue),有时被称为它的"宏任务"队列. 这一点与 [微任务队列](http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#perform-a-microtask-checkpoint) 用于网页特性,例如 `MutationObserver`,语言特征,如承诺和 `Object.observe`,以及Node.js 等特性 `process.nextTick`。每个宏任务队列的绕行在全部队列任务处理完毕后返回事件循环,即使宏任务本身排入了更多的宏任务。 然而,微任务队列将继续执行任何已排入队列的微任务,直到它被用尽.

在实践中,这意味着 如果你打电话 `setImmediate` 在另一个任务队列中 `setImmediate`,您将返回到事件循环和需要在这些调用之间执行的任何I/O或渲染任务,而不是尽快执行排队的任务.

如果您想作为渲染回路的一部分, 请考虑使用 [`requestAnimationFrame`](https://html.spec.whatwg.org/multipage/webappapis.html#dom-window-requestanimationframe); 如果您只寻找控制流排序效果, 请使用微任务解决方案, 如 [自动](https://github.com/kriskowal/asap)。 。 。 .

## 诡计

### `process.nextTick`

在0.9以下的Node.js版本中, `setImmediate` 不详,但 [`process.nextTick`](http://nodejs.org/docs/v0.8.16/api/process.html#process_process_nexttick_callback) 在那些版本中, `process.nextTick` 使用宏任务语义. 因此,我们用它来支持全球 `setImmediate`。 。 。 .

在节点0.9和以上, `process.nextTick` 移动到微任务语义,但 `setImmediate` 被引入了宏任务语义, 所以不需要多填充任何东西.

注意,我们检查 _实际数_ 节点.js 环境,而不是像由浏览器或类似器生成的环境那样的被模拟. 这种被效仿的环境往往包括: `process.nextTick` shim,那不像SetImmediate.js那样与浏览器兼容.

### `postMessage`

在Firefox 3+,Internet Explorer 9+,所有现代WebKit浏览器,和Opera 9.5+, [`postMessage`](http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#posting-messages) 并提供了在事件回路上排队任务的好方法。 相当的滥用,在同一文档内使用跨文档的通讯协议,只是为了访问事件循环任务队列,但是在有本土执行之前,这是最好的选择.

注意 Internet Explorer 8 包含一个同步版本 `postMessage`。我们检测到这个,或者任何其他这样的同步执行,然后回到另一个把戏.

### `MessageChannel`

很遗憾, `postMessage` 网络工人内部有完全不同的语义, 所以不能在那里使用。 所以我们转向 [`MessageChannel`](http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#channel-messaging),它有更糟糕的浏览器支持,但确实在网络工人内部工作.

### `<script> onreadystatechange`

最后一招,我们抽出一些东西 在互联网探索者6到8的版本中 使事情变得更快: `<script>` 并启动我们的呼叫 `onreadystatechange` 活动。 这确实在事件循环的未来转折中执行,而且速度也快于 `setTimeout(…, 0)`嘿,为什么不呢?

## 使用量

在浏览器中,用一个 `<script>` 标签;非常简单.

在节点.js, do

```
npm install --save setimmediate
```

接下来

```js
require("setimmediate");  // (somewhere early in your app; it attaches to the global scope.)
```

## 演示

-   [快速排序演示](http://jphpsf.github.com/setImmediate-shim-demo)

## 参考和阅读

-   [高效脚本 Yielding W3C 编辑器草稿](https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/setImmediate/Overview.html)
-   [介绍规格的 W3C 邮件列表](http://lists.w3.org/Archives/Public/public-web-perf/2011Jun/0100.html)
-   [IE 测试驱动演示](http://ie.microsoft.com/testdrive/Performance/setImmediateSorting/Default.html)
-   [Nicholas C. Zakas的介绍博客文章](http://www.nczonline.net/blog/2011/09/19/script-yielding-with-setimmediate/)

## 常见问题

### setimmediate 是什么？

一个 shim 的 set 即时高效脚本生成 API

### 如何安装 setimmediate？

在项目目录运行 npm install setimmediate，或使用 pnpm add / yarn add / bun add。

### setimmediate 支持 TypeScript 吗？

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

### setimmediate 支持 ESM 还是 CommonJS？

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

### setimmediate 可以商用吗？

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

### setimmediate 的下载量有多少？

根据 npm 官方下载统计，setimmediate 在 2026/10/07 – 2026/11/05 这 30 天内被下载 280,755,622 次，日均约 9,358,521 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### setimmediate 还在维护吗？

最新版本 1\.0\.5 发布于 2016/09/12（10 年前）；至今共发布 6 个版本，其中过去 12 个月发布了 0 个；首次发布于 2012/12/31。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

