Javascript:多个计时器VS单个计时器

时间:2016-04-19 21:29:30

标签: javascript timer settimeout

我有一个关于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的倍数)

哪种方法更好,为什么?非常感谢任何解释,谢谢

0 个答案:

没有答案