Sleep en Javascript
Par Méthylbro le lundi 14 avril 2008, 11:09 - Développement - Lien permanent
En php ; vous connaissez certainement la fonction sleep() qui permet d'endormir votre script pendant un laps de temps donné. Mais en javascript ; même s'il est possible de travailler avec des événements temporels ; il n'existe pas de fonction similaire.
Or ; aujourd'hui ; j'aurais bien besoin que cette fonction existe coté client. Qu'a cela ne tienne. Un petit tour sur la toile ; et j'ai trouvé rapidement la fonction suivante :
/** * @copyright http://www.phpied.com/sleep-in-javascript/ **/
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}Mais quelque chose me choque un peut dans cette proposition. Que ce passerait-il si notre boucle jusqu'a 1e7 soit trop rapide pour aller jusqu'a milliseconds. Une petite correction donc (a prendre avec des pincettes !) :
function sleep(milliseconds) {
var start = new Date().getTime();
while(true) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
Commentaires
Les pincettes sont nécessaires en effet
Le site phpied applique le principe de précaution et implémente ce qu'on appelle une sortie de boucle infinie.
Dans le cas (rare) ou l'utilisateur change l'heure de son système d'exploitation, il n'y a pas de risque de plantage du navigateur. Il faut réutiliser l'objet Date initialement créé.
A fortiori, while(true) est une forme déconseillée, d'autant qu'ici, tu pourrais injecter la condition de ta forme if..break directement dans la condition while
Have a break, have a kitkat.
Et niveau charge, système c'est pas un peut lourd un boucle "infini" ?