1

スクリプトを setTimeout が許可するよりも速く繰り返すようにする方法はありますが、それでも可能な限り速くはなりませんか?

2 つの例については、このデモを確認してください。(デモコードも掲載しています)

var x = 0;
var divEl = document.getElementById('counter');
var divEl2 = document.getElementById('counter2');

document.getElementById('gosettimeout').addEventListener('click', go, false);
document.getElementById('gotoofast').addEventListener('click', go2, false);

function go() {
    x++;
    divEl.innerHTML = x;
    if (x > 100) {
        return false;
    }
    setTimeout(function () {
        go();
    }, 0);
}

function go2() {
    x++;
    divEl2.innerHTML = x;
    if (x > 100) {
        return false;
    }
    go2();

}
4

2 に答える 2

2
var x = 0;
var divEl = document.getElementById('counter');
var divEl2 = document.getElementById('counter2');

document.getElementById('gosettimeout').addEventListener('click', go, false);
document.getElementById('gotoofast').addEventListener('click', go2, false);

function go() {
    x++;
    divEl.innerHTML = x;
    if (x > 100) {
        return false;
    }
    if (x % 2 == 0) {
     setTimeout(function () {
         go();
     }, 0);
    } else {
     go();
    }
}

function go2() {
    x++;
    divEl2.innerHTML = x;
    if (x > 100) {
        return false;
    }
    go2();

}

2 倍高速ですが、可能な限り高速ではありません =)

于 2013-07-29T13:32:47.230 に答える
1
var x = 0;
var divEl = document.getElementById('counter');
var divEl2 = document.getElementById('counter2');

document.getElementById('gosettimeout').addEventListener('click', go, false);
document.getElementById('gotoofast').addEventListener('click', go2, false);

function go() {
    divEl.innerHTML = ++x;
    if (x > 100) {
        return false;
    }
    if (x % 5 == 0) {
     setTimeout(function () {
         go();
     }, 0);
    } else {
     go();
    }
}

function go2() {
    x++;
    divEl2.innerHTML = x;
    if (x > 100) {
        return false;
    }
    go2();

}
于 2013-07-29T13:38:11.917 に答える