setimmediate

中文文档
1.0.5发布于 2016/09/12MITCommonJS零依赖近 30 天下载 2.8亿

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

中文使用文档
文档目录10 节
  1. 导言
  2. 宏任务和微任务
  3. 诡计
  4. process.nextTick
  5. postMessage
  6. MessageChannel
  7. <script> onreadystatechange
  8. 使用量
  9. 演示
  10. 参考和阅读

即时设置.js

一份YuzuJS的制作

导言

即时设置.js 高度交叉浏览器 setImmediate 财务报告和审定财务报表 clearImmediate APIs, (英语), 拟议 由微软提交网络性能工作组. setImmediate 允许脚本向浏览器屈服,同步执行给定的操作,其方式通常效率更高,消耗的功率也比通常低 setTimeout(..., 0) 模式.

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

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

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

宏任务和微任务

这个 setImmediate API,按照规定,允许您进入环境 任务队列,有时被称为它的"宏任务"队列. 这一点与 微任务队列 用于网页特性,例如 MutationObserver,语言特征,如承诺和 Object.observe,以及Node.js 等特性 process.nextTick。每个宏任务队列的绕行在全部队列任务处理完毕后返回事件循环,即使宏任务本身排入了更多的宏任务。 然而,微任务队列将继续执行任何已排入队列的微任务,直到它被用尽.

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

如果您想作为渲染回路的一部分, 请考虑使用 requestAnimationFrame; 如果您只寻找控制流排序效果, 请使用微任务解决方案, 如 自动。 。 。 .

诡计

process.nextTick

在0.9以下的Node.js版本中, setImmediate 不详,但 process.nextTick 在那些版本中, 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 并提供了在事件回路上排队任务的好方法。 相当的滥用,在同一文档内使用跨文档的通讯协议,只是为了访问事件循环任务队列,但是在有本土执行之前,这是最好的选择.

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

MessageChannel

很遗憾, postMessage 网络工人内部有完全不同的语义, 所以不能在那里使用。 所以我们转向 MessageChannel,它有更糟糕的浏览器支持,但确实在网络工人内部工作.

<script> onreadystatechange

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

使用量

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

在节点.js, do

npm install --save setimmediate

接下来

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

演示

参考和阅读

版本与发布记录

setimmediate 共发布 6 个版本,首次发布于 2012/12/31;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.0.5latest2016/09/1210 年前
1.0.42015/10/1811 年前
1.0.32015/10/1711 年前
1.0.22014/04/2812 年前
1.0.12013/01/0713 年前
1.0.02012/12/3113 年前

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