Partage
  • Partager sur Facebook
  • Partager sur Twitter

Thread en Javascript

Sujet résolu
    2 novembre 2010 à 1:36:20

    Bonjour, je suis en train de créer un programme un peu long en javascript, le problème, c'est que mon firefox bug au bout de 5 secondes de script...
    Je me demandais s'il serait possible de mettre un "quota de cpu" à firefox, ou éventuellement d'utiliser du multithreading.
    Ou alors si vous avez d'autres idées n'hésitez pas.
    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      2 novembre 2010 à 1:39:44

      Temporises ton script.

      Pour temporiser, il n'y a pas dix milles façon, c'est soit setTimeout soit setInterval.
      • Partager sur Facebook
      • Partager sur Twitter
        2 novembre 2010 à 2:01:36

        Merci de la réponse :p
        Les fonction setTimeout ou setInterval servent à executer une action au bout d'un certain laps de temps. Moi ce dont j'aurais surtout besoin ce serait d'un sleep javascript (Parce que mon code est un peu une 'boucle infini' que je ne peux pas découper en morceau pour placer un setInterval)
        • Partager sur Facebook
        • Partager sur Twitter
          2 novembre 2010 à 5:02:12

          Normalement il y a toujours une façon.
          • Partager sur Facebook
          • Partager sur Twitter
            2 novembre 2010 à 9:51:01

            Si tu voulais, tu pourrais.
            Donne ton code.

            Et sinon, tu peux essayer de faire mumuse avec les webworkers u les script defer ou asynchrone mais je suis pas sur que ça aide.
            • Partager sur Facebook
            • Partager sur Twitter
              2 novembre 2010 à 11:32:31

              Bon, je vous envoi mon code :
              function go(){
              var variable = ""
              var tot = 0;
              var i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0;
              var tableau = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p"];		
              for (i = 0; i< tableau.length; i++){
              	variable = tableau[i]+tableau[j]+tableau[k]+tableau[l]+tableau[m]
              	
              	if (test(variable))
              	{ alert (variable) }
              	
              	if (i == 15)
              	 { j++; i = 0}
              	if (j == 15)
              	 { k++; j = 0; }
              	if (k == 15)
              	 { l++; k = 0; }
              	 if (l == 15)
              	 { m++; l = 0; }
              	 if (m == 15)
              	 { break; }
              	 
              	 tot++;
              }
              	
              	}
              

              Bon alors ce code est pas terminé,
              éventuellement ca aurait été possible de diviser la fonction en deux, mais j'aurais du soit rendre mes variables globales (mauvaise idée) soit les envoyer en argument... un peu lourd.
              Sinon, je m'intéresse quand même pas mal aux thread js, si quelqu'un a un code là dessus, ca m'intéresse (rien trouvé sur gogol :/)
              Merci de vos réponses
              • Partager sur Facebook
              • Partager sur Twitter
                2 novembre 2010 à 14:24:41

                Bon j'ai essayé de rendre ton code lisible.
                function go( ) {//c'est quoi ce now de fonction ? ça fait quoi ?
                	var sString,
                	nLoops = 0,
                	i = 0, j = 0, k = 0, l = 0, m = 0, n = 0, o = 0, p = 0, q = 0,// certaines des variables sont inutiles...
                	aLetters = [ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p" ],
                	nLength = aLetters.length;
                	for ( i = 0; i < nLength; ++i ) {
                		sString = aLetters[ i ] + aLetters[ j ] + aLetters[ k ] + aLetters[ l ] + aLetters[ m ];
                		
                		if ( test( sString ) ) {
                			alert (sString)
                		}
                		
                		if ( i === 15 ) {// >= plutôt ?
                			++j;//globalement, ++i est plus rapide que i++ et ça revient au même dans ton cas
                			i = 0;
                		}
                		if ( j === 15 ) {
                			++k;
                			j = 0;
                		}
                		if ( k === 15 ) {
                			++l;
                			k = 0;
                		}
                		if ( l === 15 ) {
                			++m;
                			l = 0;
                		}
                		if ( m === 15 ) {
                			break;
                		}
                		++nLoops;
                	}
                }
                

                M'enfin je comprends pas le but de ce code...
                Tu nous expliques ?

                Et t'as des variables inutiles...
                Bref, il faudrait plus de précisions.
                • Partager sur Facebook
                • Partager sur Twitter
                  2 novembre 2010 à 14:31:20

                  C'est quand même pas un algo de crack ? o_O
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 novembre 2010 à 14:54:02

                    Si c'est le cas, il ira pas loin en JS :p
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 novembre 2010 à 15:06:13

                      Bon, ce code a rien d'illégal ni de monstrueux, pour ceux qui le croiraient...
                      J'ai une fonction de cryptage js qui fait plusieurs pages, un mot à déchiffrer.
                      Mon code n'est pas fini, c'est pour ca qu'il y a des variables inutiles :)
                      Pour le ++i c'est sympa j'étais pas au courant :D
                      La fonction go démarre le script.
                      Par contre j'ai pas trop compris l'intéret de changer certains noms de variable, ni le === car les variables ne font qu'incrémenter et donc vaudront forcément à un moment 15 :p
                      Mais ce que je recherche surtout c'est un moyen pour mon pc de ne pas souffrir.. :(
                      Merci encore de vos réponses.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 novembre 2010 à 16:32:25

                        En fait je pourrais me débrouiller pour retranscrire toute la fonction de cryptage en un autre langage, mais ca me prendrait en fait un temps énorme.
                        Je me permet d'upper le sujet par je pense que le problème d'un script javascript trop lourd pour être executé sans faire ramer le pc peut toucher pas mal de monde.
                        Je viens de trouver le lien pour le multithreading en javascript :
                        Ca ralentit un peu l'execution des script mais ca leur permet de passer et ca permet pas mal de possibilités
                        http://lelabobidouille.free.fr/dotclear/index.php?post/2009/11/21/Javascript-OOP-%3A-threads-!
                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 novembre 2010 à 16:35:54

                          Ca c'est pas des threads... c'est des timeouts/intervals. :-°
                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 novembre 2010 à 16:40:06

                            Comme dis Golmote, son principe fonctionne sur des boucles interval, comme ce que disait loacast qui t'as répondus au début.

                            Ps: le script du "threads" et crade, il met aucun des points virgules à la fin des lignes :o .
                            Je sais qu'on peut le faire mais sa fais pas très propre quoi.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 novembre 2010 à 16:45:10

                              Bon, je t'avoue que je me suis pas encore plongé dans le code source pour le moment, mais rien qu'en y regardant plus de 2 secondes j'ai vu qu'il ne s'agit pas d'un code de 3 lignes, et si tu as testé l'exemple tu vois que deux script différents fonctionnent en même temps..Bon si c'est pas du threading, moi...
                              Sinon pour la "propreté" du script, j'ai pas placé ce lien comme un exemple de code parfait, mais comme quelque chose sur quoi s'appuyer pour bosser. Et les points virgules en fin de ligne ne sont pas obligatoire en javascript.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 novembre 2010 à 16:52:00

                                Tu peux voir que c'est des boucles en l'utilisant sous Ie, qui lui gère moins vite les setTimeout/interval, c'est saccrément plus saccadé !

                                Citation

                                Et les points virgules en fin de ligne ne sont pas obligatoire en javascript.

                                Pour sa que j'ai dis "je sais qu'on peut le faire", mais il n'en reste pas moins qu'il ne faut pas le faire (pour de multiples raisons qui ne sont pas le débat ici).
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  4 novembre 2010 à 17:12:20

                                  Citation : yosky

                                  Bon, je t'avoue que je me suis pas encore plongé dans le code source pour le moment.



                                  Moi je l'ai fait. :-°

                                  Et il lance simplement un setInterval() pour chaque défilement de texte.

                                  Le principe de "threads" mis en place ne sert au final qu'à s'assurer de ne pas lancer deux fois la même animation... (Tu auras beau recliquer sur Go, il ne se passera rien.)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    6 novembre 2010 à 14:35:03

                                    Eh bien ce que j'ai fais dans mon code c'est faire d'un premier champ input (qui correspond à ma variable) un objet de cette classe et un autre objet correspondant à un bouton stop, arrêtant ma fonction, ca marche parfaitement, et surtout, mon script ne prend pas tout le cpu :p
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Thread en Javascript

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown