一尘不染

是否有比setTimeout更准确的方法来创建Javascript计时器?

javascript

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

根据我的经验,在很多情况下计时器都非常不准确。所谓不准确,是指实际延迟时间或多或少地相差250-500ms。尽管这不是很长的时间,但是使用它来隐藏/显示UI元素时,时间显然是显而易见的。

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


阅读 254

收藏
2020-04-25

共1个答案

一尘不染

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

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

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

摘要:停止使用setTimeout()实现“一个计时器/一个任务”的设计,并使用实时时钟来平滑UI动作。

2020-04-25