setInterval est mal foutu, mais on a une solution...
...encore heureux !
Mais comment ça, une fonction de Javascript est mal foutue ? Pour un langage pareil, ce serait vraiment étonnant. *tousse*
Prenons un exemple simple : vous avez une fonction à exécuter toutes les x millisecondes, pour faire une opération du style compte à rebours.
Vous aurez donc l’initiative d’utiliser setInterval - ce qui n'est pas une mauvaise intuition. Le problème de ce dernier étant juste que, au bout d’un moment, il se peut qu’il prenne du retard à exécuter la fonction demandée, et il y a donc une latence. C’est plutôt gênant si vous avez besoin que votre fonction soit appelée à une intervalle strictement égale au fil du temps.
L’astuce pour régler ce problème est donc d’utiliser un setTimeout en se basant sur new Date.now() : on exécute la fonction dans x millisecondes, mais si besoin, on retire des millisecondes de retard à ces x millisecondes.
Et pour vous éviter de coder ça vous-même, la bibliothèque Tock implémente cette technique avec en bonus quelques options supplémentaires par rapport à un simple setInterval.
Tout se trouve sur la page de son dépôt GitHub, et c'est tout sauf difficile à utiliser.