16 votes

Peut-il arriver que setTimeout soit trop long ?

Je crée une application qui interroge le serveur pour des modifications spécifiques. J'utilise une fonction auto-appelante en utilisant setTimeout. Quelque chose comme ça en gros:

someFunction();

function someFunction() {
  $.getScript('/some_script');
  setTimeout(someFunction, 100000);
}

Pour rendre cette interrogation moins intensive pour le serveur, je veux avoir un intervalle de temps plus long; Peut-être quelque part entre 1 et 2 minutes. Y a-t-il un moment où le délai de setTimeout devient trop long et ne fonctionne plus correctement?

15voto

sajawikio Points 1506

Vous êtes techniquement OK. Vous pouvez avoir un délai d'attente allant jusqu'à 24.8611 jours!!! si vous le souhaitez vraiment. setTimeout peut aller jusqu'à 2147483647 millisecondes (le maximum pour un entier 32 bits, soit environ 24 jours) mais si cela est plus élevé, vous verrez un comportement inattendu. Voir Pourquoi setTimeout() "se casse" pour de grandes valeurs de délai en millisecondes ?

Pour les intervalles, comme le polling, je recommande d'utiliser setInterval au lieu d'un setTimeout récursif. setInterval fait exactement ce que vous voulez pour le polling, et vous avez plus de contrôle aussi. Exemple : Pour arrêter l'intervalle à tout moment, assurez-vous d'avoir stocké la valeur de retour de setInterval, comme ceci :

var guid = setInterval(function(){console.log("running");},1000) ;
//Votre console affichera "running" toutes les secondes après la commande ci-dessus!

clearInterval(guid) 
//appeler ce qui précède arrêtera l'intervalle; plus de console.logs!

3voto

Curt Points 42871

setTimeout() utilise un entier 32 bits pour son paramètre de délai. Par conséquent, le maximum est :

2147483647

Au lieu d'utiliser un setTimeout() récursif, je recommande d'utiliser setInterval():

setInterval(someFunction, 100000);

function someFunction() {
   $.getScript('/some_script');
}

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