我有一个关于Javascript计时器及其性能的简单问题,但它确实让我感到困惑,因为我无法找到正确的方法。
问题在于:我有一个特殊的计时功能,可以自我纠正:
function setCorrectingInterval(func, delay) {
if (!(this instanceof setCorrectingInterval)) {
return new setCorrectingInterval(func, delay);
}
var target = Date.now() + delay;
var self = this;
function tick() {
if (self.stopped) {
return;
}
target += delay;
func();
setTimeout(tick, target - Date.now());
}
setTimeout(tick, delay);
}
然后,在我的应用程序中,我使用此函数n次来设置n个不同的计时器变量。因此,如果我有两个计时器变量,我将使用此函数两次来设置它们。在下面的代码中,我每1000毫秒执行第一个任务,每2000毫秒执行第二个任务:
var firstTimer,
secondTimer;
function startFirstTimer() {
firstTimer = setCorrectingInterval(function() {
console.log("First!");
}, 1000);
}
function startSecondTimer() {
secondTimer = setCorrectingInterval(function() {
console.log("Second!");
}, 2000);
}
startFirstTimer();
startSecondTimer();
在我的角度应用程序中,对多个计时事件的需求不断增长和增长。所以我的(临时)解决方案是使用上面提到的setCorrectingInterval函数使用新的setTimeouts创建新的计时器变量。
所以我开始思考 - 如果只有一个单一的定时器变量和一个单独的setTimeout,使用if语句我将执行满足条件的任务,就不会更好(性能明智),如下所示:
var timer;
function startTimer() {
var counter = 1;
timer = setCorrectingInterval(function() {
console.log("First!");
if (counter % 2 === 0) {
console.log("Second!");
}
counter++;
}, 1000);
}
startTimer();
(假设每个任务都会重复执行,延迟是1000的倍数)
哪种方法更好,为什么?非常感谢任何解释,谢谢