js实现对时间的监测

export function getIntP(callback) {
    setInterval(() => {
                console.log(callback)
        let date = new Date()
        let hours = date.getHours()
        if (date.getMinutes() == 0 && date.getSeconds() === 0) {
            typeof callback === 'function' ? callback(hours) : null
        }
    }, 1000)
}

一个对整点时间的监听函数,但是我测试发现大打印callback一次有一次没有一直这样重复

这点计算对计算机来说九牛一毛,哪种都可以。哪种不太会就用哪种

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/727891
  • 除此之外, 这篇博客: 前端setInterval和setTimeout计时误差问题分析&&解决方案中的 拓展 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 最近发现一个新的问题,
    切换页面导致计时器停止,setInterval切换页面后不执行

    原因
    因为浏览器的优化原因,setTimeout()和setInterval(),在浏览器窗口非激活的状态下会停止工作或者以极慢的速度工作。

    解决方案
    准备用 Web Workers 去做一个优化。

    Web WorkersWeb Workers 是 HTML5
    提供的一个javascript多线程解决方案,可以将一些大计算量的代码交由web Worker运行而不冻结用户界面。

    参考
    https://blog.csdn.net/lhz_333/article/details/105678627

    本文链接https://blog.csdn.net/qq_39903567/article/details/115392972

  • 以下回答由chatgpt基于相关博客总结生成:

    个人建议使用第一种方式,即使用setInterval方法。因为setInterval可以按照指定的时间间隔不断执行回调函数,而不需要像setTimeout一样反复进行计时器操作。此外,setInterval比较简单易懂,容易维护和调试。如果你要实现类似于整点报时的定时功能,setInterval是非常合适的选择。如果要保证时间精度,可以在setInterval中调用性能更高的Date.now()方法来实时获取当前时间。如果要实现一个更加精确的计时功能,可以使用requestAnimationFrame来替代setInterval和setTimeout。requestAnimationFrame可以保证动画的流畅性并且会自行调整帧速率,避免了setInterval和setTimeout可能出现的短暂卡顿。具体代码实现可以参考以下示例:

    function preciseSetInterval(callback, interval) {
      var time = {start: 0, elapsed: 0};
      var requestId;
      var tick = function(timestamp) {
        if (!time.start) time.start = timestamp;
        time.elapsed = timestamp - time.start;
        if (time.elapsed >= interval) {
          callback();
          time.start = timestamp;
        }
        requestId = requestAnimationFrame(tick);
      };
      requestId = requestAnimationFrame(tick);
      return function() {
        cancelAnimationFrame(requestId);
      };
    }
    
    // 使用方式如下:
    var cancelTimer = preciseSetInterval(function() {
      console.log("Time is now: " + new Date());
    }, 1000);
    
    // 可以通过调用cancelTimer函数来取消定时器
    // cancelTimer();