以毫秒为间隔检测秒数
Posted
技术标签:
【中文标题】以毫秒为间隔检测秒数【英文标题】:Detect the seconds in a millisecond interval 【发布时间】:2015-09-03 19:10:24 【问题描述】:setInterval 函数中的第二个参数用于延迟执行,以毫秒为单位。正如预期的那样,1000 毫秒每秒将触发该功能。但这是一件我不太明白的奇怪事情。在第二个间隔中,我将延迟参数设置为 1 毫秒,并放入函数增量数字和条件以检查每个传递的 1000 数字。我希望它的行为就像秒间隔计时器一样。但它并没有像我希望的那样运行。
对此有什么解释吗?
// detect seconds in a second interval timer (works as expected)
setInterval(function()
console.log('passed second from the secondInterval');
, 1e3);
// detect seconds in a millisecond interval timer (I don't have any explanation for the behavior).
(function()
var i = 0;
setInterval(function()
if (i === 0)
i++;
return;
if (i % 1000 === 0) console.log('passed second from the millisecondInterval');
i++;
, 1);
)();
查看 jsfiddle 中的示例以了解我的意思 http://jsfiddle.net/dwh82zos/
【问题讨论】:
***.com/questions/9647215/… 延迟以毫秒表示,但没有毫秒精度。更多地将其视为建议。您真的希望网页每秒运行 1000 次代码吗?真正的最小值可能约为 10-15 毫秒,具体取决于浏览器、操作系统等。 @Cameron 如果您正在处理动画帧并且您确实需要它如此准确,那将非常糟糕。 @symcbean.. 我认为这很清楚。我需要比较毫秒计时器和秒计时器中的秒数检测。我在问为什么它不能按预期工作!你有什么不明白的?! @Husamuddin:你可以足够准确地measure time,只是你不能以精确的时间间隔调用你的回调。原生游戏也有完全相同的问题——例如,Win32 的睡眠分辨率只有 10-15 毫秒之内,而且总是有抖动,这取决于系统上运行的其他内容等。查看requestAnimationFrame
——浏览器为您管理回调间隔。
【参考方案1】:
会发生这种情况。该句子不是每秒记录一次,也不是你的机器可以记录的任何内容。您的内存不足,无法解决,第一次每 1 毫秒 6 次操作,第二次每 1 毫秒 3 次操作。 看看这个What is minimum millisecond value of setTimeout? 它是关于 setTimeout 但它很有用。
【讨论】:
以上是关于以毫秒为间隔检测秒数的主要内容,如果未能解决你的问题,请参考以下文章
面试官:Netty心跳检测机制是什么,怎么自定义检测间隔时间?