如何知道哪些事件减慢了setTimeout?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何知道哪些事件减慢了setTimeout?相关的知识,希望对你有一定的参考价值。

如何知道哪些事件减慢setTimeout()

在我的代码中,我有一个2秒的关键帧动画。

我添加了一个类来设置div的动画

$('#first').addClass('first-start');

并使用setTimeout我添加一个类,仅在1秒后停止动画。

setTimeout(function() {
    $('#first').addClass('first-pause');
}, 1000);

如果我不阻止它,所有动画应该是2秒。

我注意到setTimeout有时在1000毫秒后没有完全运行。我怎么解决这个问题?

我怎么知道哪些事件减慢setTimeout

答案

javascript定时器非常不准确,你无能为力。只有满足以下两个条件时,定时器才会启动:

  • 当前活动的排队事件的执行堆栈为空
  • 计时器已经过去了

掌握原因的关键见解是理解JavaScript是规范的单线程(在Node.js Cluster和浏览器WebWorker API之外)

我列表中的第一项很大程度上取决于当前执行上下文中setTimeout调用之外的代码。根据事件循环实现,它甚至还可以依赖于其他事件,这些事件可能已经设法插入当前事件队列项之间,因为在设置定时器之前到达队列,或者甚至(在某些实现中)通过之前到达计时器已经过去了。

由于JavaScript是单线程的,因此在执行过程中不会中断任何操作,并且只有在所有先前的项目完全执行后才会处理队列中等待的项目(包括已用的计时器)。

MDN一如既往地为您提供更详细的理论方面见解以及这些概念的SpiderMonkey实现:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop

另一答案

在setTimeout中使用removeClass函数删除你添加的'first-start'类。

setTimeout(function() {
$('#first').removeClass('first-pause');

}, 1000);

以上是关于如何知道哪些事件减慢了setTimeout?的主要内容,如果未能解决你的问题,请参考以下文章

你知道哪些关于压力传感器的知识

为啥我的 C 代码运行缓慢?

如何让 JS onkeyup事件停止一定事件后执行某个操作

"setTimeout" VS "debounce" 插件 - 延迟事件的代码执行

与分页相关的哪些 LINQ 操作可能会减慢我的查询速度?

网络音频 api 计时是不是比 setTimeout 更精确