在vue中如何实现准时的setTimeout

概要

setTimeout 是不准的。因为 setTimeout 是一个宏任务,它的指定时间指的是:进入主线程的时间。

整体架构流程

当每一次定时器执行时后,都去获取系统的时间来进行修正,虽然每次运行可能会有误差,但是通过系统时间对每次运行的修复,能够让后面每一次时间都得到一个补偿。

技术细节

timer() { 
  var speed = 1000, // 设定间隔 
  counter = 1,  // 计数 
  start = new Date().getTime(); 
  // 记录理想值 ideal
  // 记录真实值 real
  // 差值 diff
  function instance(){ 
    var real = (counter * speed), 
    ideal = (new Date().getTime() - start); 
    counter++; 
    var diff = (ideal - real); 
    window.setTimeout(function() { instance(); }, (speed - diff)); // 通过系统时间进行修复 
    console.log(real/1000);
  }; 

  window.setTimeout(function() { instance(); }, speed); 
},

小结

通过系统的时间补偿,能够让我们的 setTimeout 变得更加准时,至此我们完成了如何让 setTimeout 准时的探索。

相关推荐

  1. vue如何实现准时setTimeout

    2023-12-15 14:56:02       36 阅读
  2. 如何Vue3实现无缝热重载:提升你开发效率

    2023-12-15 14:56:02       35 阅读
  3. React和Vue router 实现原理如何

    2023-12-15 14:56:02       28 阅读
  4. vue2如何实现数据更新?

    2023-12-15 14:56:02       17 阅读
  5. Vue双向数据绑定是如何实现

    2023-12-15 14:56:02       10 阅读
  6. 如何MySQL实现基于时间点恢复?

    2023-12-15 14:56:02       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-15 14:56:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-15 14:56:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-15 14:56:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-15 14:56:02       20 阅读

热门阅读

  1. rust unresolved import‘xxx‘

    2023-12-15 14:56:02       45 阅读
  2. 国内一些高校科研院所在解包裹方面的创新

    2023-12-15 14:56:02       38 阅读
  3. Linux的时间同步命令

    2023-12-15 14:56:02       42 阅读
  4. 常见视频、图片格式及特点

    2023-12-15 14:56:02       46 阅读
  5. Hbase的Rowkey设计

    2023-12-15 14:56:02       39 阅读
  6. Android开发中将String数据写入本地文件

    2023-12-15 14:56:02       43 阅读
  7. IIS配置多域名跨域

    2023-12-15 14:56:02       71 阅读
  8. Ruoyi-vue项目中用户列表分页数据错乱的解决办法

    2023-12-15 14:56:02       37 阅读
  9. 【刷题笔记1】

    2023-12-15 14:56:02       40 阅读