Javascript倒计时越来越慢

Javascript countdown is going slow?

本文关键字:越来越 倒计时 Javascript      更新时间:2023-09-26

我正在尝试进行以毫秒为单位的倒计时;然而,倒计时实际上要比7秒长得多。知道为什么吗?

function countDown(time){
    var i = 0;
    var interval = setInterval(function(){
        i++;
        if(i > time){
            clearInterval(interval);
        }else{
            //mining
            $('#mining_time').text($('#mining_time').text()-1);
        }
    }, 1);
}

我可以确认传递给函数的可变时间正确设置为7000。

要获得最准确的倒计时,请使用setTimeout()

setTimeout(fn, 7e3);

如果您绝对必须让它尽可能接近7秒,请使用紧密轮询(requestAnimationFrame())并查看开始时间和当前轮询时间之间的差异。

var startTime = Date.now();
requestAnimationFrame(function me() { 
     var deltaTime = Date.now() - startTime;
     if (deltaTime >= 7e3) {
         fn();
     } else {
         requestAnimationFrame(me);
     }
});

根据需要填充多边形。

  1. 在7秒后运行的最精确方法是使用setTimeout7000ms间隔
  2. a。没有浏览器可以保证以1ms的分辨率运行一段时间。最好的情况是7-10ms
  3. b。js中只有一个线程,所以任务是排队的。这意味着只有在当前运行完成后,才会安排下一次运行

一些有用的阅读:http://ejohn.org/blog/how-javascript-timers-work/

任何浏览器都不会将1作为setInterval的参数。在我的脑海中,最小值是4毫秒。

要获得准确的结果,请获取当前时间,添加7000毫秒,然后轮询(使用setInterval或setTimeout),直到达到该新时间。

快速的Web搜索返回了这篇提供示例的文章。

[更新]此MDN页面上提到了4ms的值。