一直困扰着我的是 Javascript 中的 setTimeout() 方法是多么不可预测。

根据我的经验,计时器在很多情况下都非常不准确。不准确,我的意思是实际延迟时间似乎或多或少有 250-500 毫秒的变化。虽然这不是很长的时间,但是当使用它来隐藏/显示 UI 元素时,时间会很明显。

是否有任何技巧可以确保 setTimeout() 准确执行(无需求助于外部 API),或者这是一个失败的原因?

最佳答案



没有也没有。你不会得到任何接近 setTimeout() 的完美计时器 - 浏览器没有为此设置。 但是 ,你也不需要依赖它来计时。大多数动画库在几年前就发现了这一点:您使用 setTimeout() 设置回调,但根据 (new Date()).milliseconds(或等效值)的值确定需要执行的操作。这使您可以在较新的浏览器中利用更可靠的计时器支持,同时在较旧的浏览器上仍能正常运行。

它还可以让您避免使用太多计时器!这很重要:每个计时器都是一个回调。每个回调都执行 JS 代码。当 JS 代码正在执行时,浏览器事件——包括其他回调——被延迟或丢弃。当回调完成时,额外的回调必须与其他浏览器事件竞争执行的机会。因此,一个处理该时间间隔内所有待处理任务的计时器将比两个具有重合间隔的计时器执行得更好,并且(对于短超时)比具有重叠超时的两个计时器更好!

总结:停止使用setTimeout()来实现“一个定时器/一个任务”的设计,并使用实时时钟来平滑UI Action 。

关于javascript - 有没有比 setTimeout 更准确的方法来创建 Javascript 计时器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/196027/

10-13 08:42