108 votes

Afficher tous les délais/intervalles dans javascript ?

J'écris une application qui utilise des délais et des intervalles JavaScript pour mettre à jour la page. Existe-t-il un moyen de voir combien d'intervalles sont configurés ? Je veux m'assurer que je ne vais pas accidentellement tuer le navigateur en ayant des centaines d'intervalles configurés.

Est-ce que c'est un problème ?

93voto

Paul Dixon Points 122033

Je ne pense pas qu'il existe un moyen d'énumérer les temporisateurs actifs, mais vous pouvez remplacer window.setTimeout window.clearTimeout par vos propres implémentations qui effectuent un suivi et ensuite appeler les originaux.

window.originalSetTimeout = window.setTimeout;
window.originalClearTimeout = window.clearTimeout;
window.activeTimers = 0;

window.setTimeout = function(func, delay) {
    window.activeTimers++;
    return window.originalSetTimeout(func, delay);
};

window.clearTimeout = function(timerID) {
    window.activeTimers--;
    window.originalClearTimeout(timerID);
};

Bien sûr, vous ne pouvez pas toujours appeler clearTimeout, mais cela vous donnerait au moins un moyen de suivre ce qui se passe à l'exécution.

33voto

NVI Points 3846

J'ai fait une extension Chrome DevTools qui montre tous les intervalles. Les effacés sont grisés.

Timers Chrome Devtool extension

setInterval-sniffer

11voto

crv Points 1813

Vu que Paul n'a couvert que setTimeout, je pensais partager un compteur pour setInterval/clearInterval.

window.originalSetInterval = window.setInterval;
window.originalClearInterval = window.clearInterval;
window.activeIntervals = 0;
window.setInterval = function (func, delay)
{
    if(func && delay){
            window.activeIntervals++;
    }
    return window.originalSetInterval(func,delay);
};
window.clearInterval = function (intervalId)
{
    // JQuery sometimes hands in true which doesn't count
    if(intervalId !== true){
        window.activeIntervals--;
    }
    return window.originalClearInterval(intervalId);
};

5voto

Ziv polack Points 59

Nous venons de publier un paquet résolvant ce problème exact.

npm install time-events-manager

Avec cela, vous pouvez les afficher et les gérer via l'objet timeoutCollection (et les intervalles de javascript via l'objetintervalCollection).

timeoutCollection.getScheduled(); timeoutCollection.getCompleted(); timeoutCollection.getAll();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X