它没有最小延迟,这实际上是浏览器和节点之间的兼容性问题。计时器在Javascript中是完全未指定的(这是DOM规范,它在Node中没有用,甚至浏览器也没有遵循),而node实现它们的原因仅仅是因为它们在Javascript的历史上具有多么基础,以及它们在其他方面的替代性。
Node使用libuv,libuv是跨平台的抽象层,用于较低级别的系统(例如文件系统,网络等)。计时器是其中之一,Node提供了最少的包装。在libuv级别,使用的计时器是系统特定的高精度计时器。例如,在Windows中,使用来实现此功能
QueryPerformanceFrequency,
FileTimeToSystemTime并提供以纳秒为单位的分辨率。
在Node中,如果指定
setTimeout(callback,1),它将在一毫秒后执行(假设系统不会因为不堪重负而延迟)。在浏览器中,最短时间为HTML5规范指定的4毫秒:https
:
//developer.mozilla.org/en/DOM/window.setTimeout。这不是保证的时间,只是最短的时间。可以预期大多数浏览器的分辨率约为15ms,这会影响DOM动画。
一个有效的信息是,在同一帧内设置为相同毫秒的超时将按照它们排队的顺序执行。如果要这样做:
setTimeout(callback1, 1); setTimeout(callback2, 1); setTimeout(callback3, 1); setTimeout(callback4, 1);
总而言之,Node应该按该顺序调用它们。仅当它们具有完全相同的解析时间时才适用。
http://msdn.microsoft.com/zh-
CN/library/windows/desktop/ms644905(v=vs.85).aspx
http://msdn.microsoft.com/zh-
CN/library/windows/desktop/ms724280(v=vs.85).aspx



