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一次有一次没有一直这样重复
这点计算对计算机来说九牛一毛,哪种都可以。哪种不太会就用哪种
最近发现一个新的问题,
切换页面导致计时器停止,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
个人建议使用第一种方式,即使用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();