JeuWeb - Crée ton jeu par navigateur
setTimeOut - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : setTimeOut (/showthread.php?tid=3193)



setTimeOut - Wells - 22-10-2008

Je me permet d'ouvrir un sujet sur cette fonction de javascript qui reste très mystérieuse. Pas dans le fonctionnement je vous rassure, mais dans son mode d'utilisation.

En effet je m'en sert pour faire qq chose de simple.

Je prend un div que je nome toto.

Je lance une fonction:

Code :
function tata()
{
document.getElementById("toto").style.left=document.getElementById("toto").style.left+1
setTimeout("tata()",100);
}

En gros ce que c'est censé faire: déplace de 1 pixel vers la droite mon bloc tout les 100 ms. (le code est peu eter faux c'est juste une illustration)

Ce que ca fait: ca lag à mort. Le navigateur (ie ou ff) saccade sans arret.

Je n'est certes pas un pc dernière génération, mais je reste circonspect. Pourquoi 100% de cpu juste pour déplacer un malheureux div d'un pixel à l'écran?

Y a t'il une subtilité qui m'échappe?


RE: setTimeOut - Zamentur - 22-10-2008

Déjà tu pourrais ne demander qu'une seul fois document.getElementById("toto").style.left et l'enregistrer dans une variable, afin d'éviter de redemander constamment la même chose...

Mais bon c'est surtout que ce script est faux...
fais un alert sur document.getElementById("toto").style.left il te retourne pas un truc du genre XXXpx?

Donc c'est une chaine de caractere, donc ce que tu fais çà reviens à
document.getElementById("toto").style.left="XXXpx1";

Pour convertir tu as parseInt qui fait çà très bien...

En tout cas ici une fois cette petite modif faites çà fonctionne bien. Entre 0% et 2% CPU.


RE: setTimeOut - Wells - 22-10-2008

Oui je sais que le script est faux, la question était surtout niveau perf. Avec un Mono processeur Athlon 3500+, je lag à mort. Certes le pc à trois ans, mais bon tt le monde à pas la dernière config de la mort. Surtout pour allé sur le web!


RE: setTimeOut - Zamentur - 22-10-2008

J'avoue avoir fait çà sur un intel core 2 duo de l'UTC... mais bon c'est pas non plus une config de la mort.
Enfin surtout çà me mettais 0% CPU. Autrement dit sur un 3500+ il y avais moyen de faire beaucoup moins que 100%!

T'es sur que c'est ce point précis du script qui cloche car moi j'ai éssayais aussi avec 10ms au lieu de 100 et c'était pareil!

NB: j'ai éssayer aussi à 1 ms mais çà aller à la même vitesse qu'à 100ms, je me suis dit que l'action prenait donc dans les 10ms à faire quand même


RE: setTimeOut - Anthor - 24-10-2008

Oui Oxman, setInterval ou setTimeout en créant la variable et en la mettant à null ensuite pour vider la mémoire Smile


RE: setTimeOut - Wells - 27-10-2008

Mettre la variable a nul ou plutôt utiliser un clearTimeOut()?