前端setInterval和setTimeout计时误差问题分析&&解决方案

本文分析了前端使用setInterval和setTimeout实现计时导致的误差问题,探讨了误差产生的原因——JavaScript单线程及事件循环机制。通过模拟阻塞事件展示了误差在实际项目中的影响。解决方案是采用误差修正,动态调整setTimeout的间隔以减少误差。此外,针对页面切换计时器停止的问题,提出了使用Web Workers作为优化策略。
摘要由CSDN通过智能技术生成

一、背景

最近项目中加了一个计时器,我是用setInterval来实现计时的,用于显示订单剩余支付时间,但我发现,短时间还好,时间长了,计时器的误差会很大。

二、问题

我现在来模拟一下这个问题

1.用setInterval实现计时

来看段代码

var start = new Date().getTime(), count = 0;
var interval = setInterval(function () {
    count++
    console.log(new Date().getTime() - (start + count * 1000) + 'ms')
    if(count == 10){
    clearInterval(interval);
    }
}, 1000)

在这里插入图片描述

可以看到,我打印的new Date().getTime() - (start + count * 1000) ,
也就是每次计时的误差,理想情况下,应该是0。

2.用setTimeout实现计时

var start = new Date().getTime(), count = 0,interval = 1000;
var timer = setTime
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值