gpt4 book ai didi

javascript - Node.js 是否强制 setTimeout 的最小延迟?

转载 作者:IT老高 更新时间:2023-10-28 21:55:49 27 4
gpt4 key购买 nike

在浏览器中,如果您在 setTimeout 调用的函数中使用 setTimeout,则将强制执行 4 毫秒的最小延迟。 Mozilla 的开发者维基 describes this behaviour ,并提到它有 become standardized in HTML5 .

Node.js 的 documentation for setTimeout没有提到最小延迟。但是,the process.nextTick function 的文档将其描述为 setTimeout(fn, 0) 的更有效替代方案。这表明它可能更有效,因为它避免了这种延迟。否则 setTimeout(fn, 0) 可能会被优化为表现相同。

Node.js 是否像 Web 浏览器那样强制设置 setTimeout 的最小延迟?

最佳答案

它没有最小延迟,这实际上是浏览器和 Node 之间的兼容性问题。计时器在 JavaScript 中是完全未指定的(它是一种 DOM 规范,在 Node 中没有用,甚至浏览器也不遵循),node 实现它们仅仅是因为它们在 JavaScript 历史中的基础性以及它们在其他方面的不可替代性。

Node 使用 libuv,它是一个跨平台抽象层,用于较低级别的系统事物,如文件系统、网络事物等。其中之一是计时器,Node 提供了一个最小的包装器。在 libuv 级别,使用的计时器是系统特定的高精度计时器。例如,在 Windows 中,这是使用 QueryPerformanceFrequencyFileTimeToSystemTime 实现的,提供以纳秒为单位的分辨率。

在 Node 中,如果你指定 setTimeout(callback, 1) 那么它将在一毫秒后执行(假设系统不会因为不堪重负而延迟它)。在浏览器中,HTML5 规范规定的最短时间为 4 毫秒:https://developer.mozilla.org/en/DOM/window.setTimeout .这不是保证时间,只是最低限度。大多数浏览器的分辨率约为 15 毫秒,这会影响 DOM 动画。

一个有效的信息是设置为相同毫秒的超时,在同一帧期间,将按照它们排队的顺序执行。如果你这样做:

  setTimeout(callback1, 1);
setTimeout(callback2, 1);
setTimeout(callback3, 1);
setTimeout(callback4, 1);

在一个 block 中,Node 应该按顺序调用它们。这仅适用于它们具有完全相同的解析时间。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms644905(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724280(v=vs.85).aspx

关于javascript - Node.js 是否强制 setTimeout 的最小延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7221504/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com