优化js定时器准确性

15 篇文章 0 订阅
5 篇文章 1 订阅

思路:使用时间戳,计算延迟时间,用延迟时间抵消一部分定时器的时长

  • 不做优化
let cnt = 0;
let start = Date.now();
// 耗时任务
setInterval(() => {
  let num = 100000000;
  while (num--) { }
});
setInterval(() => {
  cnt++;
  console.log("延迟:" + (Date.now() - (start + cnt * 1000)));
}, 1000);
// 延迟:106
// 延迟:176
// 延迟:286
// 延迟:416
// 延迟:523
// 延迟:602
// 延迟:676
  • 优化
let cnt = 0;
let start = Date.now(), wait = 1000, delay = 0;
// 耗时任务
setInterval(() => {
  let num = 100000000;
  while (num--) { }
});
// 计时回调
function foo() {
  cnt++;
  let delay = Date.now() - (start + 1000 * cnt);
  console.log("延迟:" + delay);
  // 将延迟时间与计时器等待时间抵消
  let newWait = wait - delay;
  setTimeout(foo, newWait);
}
setTimeout(foo, wait);

// 延迟:104
// 延迟:111
// 延迟:88
// 延迟:68
// 延迟:131
// 延迟:96
// 延迟:88
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值