IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

JS, fonction récursive: Lourdeur anormale sur IE7


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut JS, fonction récursive: Lourdeur anormale sur IE7
    Bonjour tout le monde,
    j'ais une fonction javascript qui se lance normalement sur Firefox voir très rapidement, par contre c'est très lourd sur IE7, et vraiment je ne sais pas pourquoi,
    Voilà le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    function OnClickDossier( index, texte )
    			{
    			document.treeform.typeElement.value = "R";
    		         // Remplir les informations necessaires pour effectuer des opérations comme add, delete..
     
    			    document.treeform.selectedSubDBId.value = treeView.Noeuds(treeView.Noeuds(index).subIndex).indexDb;
     
    			    document.treeform.selectedDBId.value = treeView.Noeuds(index).indexDb;
    			    //alert("idDB"+document.treeform.selectedDBId.value );
    			    document.treeform.selectedIndexId.value = index;
    			     //alert("index"+document.treeform.selectedIndexId.value );
    			    document.treeform.selectedSubIndexId.value = treeView.Noeuds(index).subIndex;
     
    			    document.treeform.addregion.disabled = false;
    			    document.treeform.addcountry.disabled = false;
     
    			    if(treeView.Noeuds(index).tableauEnfants.length != "0"){
     
    			   var varSupp ="Y";
    			   for(var j=0;j<treeView.Noeuds(index).tableauEnfants.length; j++){
    			   if(treeView.Noeuds(index).tableauEnfants[j].deleteIndice == "N"){
    			   varSupp ="N";
    			   }
    			   }
    			   if(varSupp == "N")
    			    document.treeform.supprimer.disabled = true;
    			    else
    			     document.treeform.supprimer.disabled = false;
    			    }
    			    else{
     
    			     document.treeform.supprimer.disabled = false;
    			    }
    			    //alert("Avant change expand");
    				//treeView.Noeuds( index ).ChangerExpand( ! treeView.Noeuds( index ).isExpand );
    			     //alert("après change expand");
    			    ChangeAllChild(treeView);
    			     //alert("Après change all child");
    			     			    document.all['name'+treeView.Noeuds( index ).table].className = "InputSelect";
     
    				document.all[treeView.Noeuds( index ).table].className = "PosteSelect";
    			 //alert("Après classe name");
    			}
     
    function ChangeAllChild(treeView)
              {
              for( var x = 0; x < treeView.tableauEnfants.length; x++){
    				document.all[treeView.Noeuds(treeView.tableauEnfants[x].index ).table].className = "PosteChange";
    								document.all['name'+treeView.Noeuds(treeView.tableauEnfants[x].index ).table].className = "InputHidden";
     
    				if(treeView.tableauEnfants[x].HaveAChild){
    				ChangeAllChild(treeView.tableauEnfants[x]);
    				}
    				//alert(treeView.tableauEnfants[x].indexDb);
    				}
              }

    Merci d'avance de m'avoir aider

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    tu peux gagner en perf =>

    remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(var j=0;j<treeView.Noeuds(index).tableauEnfants.length; j++)
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(var j=0,l=treeView.Noeuds(index).tableauEnfants.length;j<l; j++)
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChangeAllChild(treeView);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var temp = new ChangeAllChild(treeView)
    ;

    ensuite pour ta méthode récursive je la décomposerais

    parcours de tes noeuds parent ( fonction 1 )
    pour chaque parent , appel de la fonction 2 qui s'occupe d'assigner les classes

    bon courage

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut
    Merci beaucoup,

    ça rend l'exécustion un peu plus rapide, mais loin d'être la même sur FireFox,

    Par contre pour la fonction récursive je vois pas comment la décomposer

    Merci

  4. #4
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
            function ChangeAllChild(treeView)
              {
              var l = treeView.tableauEnfants.length;
              var AppelTemp = null;
              var tempElem = null;
              while(l){
                    tempElem = document.all[treeView.Noeuds(treeView.tableauEnfants[l].index ).table];
                    AppelTemp = new AssignClass(tempElem,"PosteChange");
                    tempElem = document.all['name'+treeView.Noeuds(treeView.tableauEnfants[l].index ).table];
    			    AppelTemp = new AssignClass(tempElem,"InputHidden")
    			   l--; 
              }
    		    if(treeView.tableauEnfants[l].HaveAChild){
    		        ChangeAllChild(treeView.tableauEnfants[l]);
    		    }
              }
            function AssignClass(element,NomClasse){
                element.className = NomClasse;
            }
    j'ai mis une méthode de parcours inversée ( le while ) qui devrait augmenter énormément les perfs ... a tester

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 160
    Par défaut
    Désolé, mais ça marche pas cette méthode,


    Merci

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Par défaut
    . . .
    j'adore ce genre de réponse
    d'une je n'ai pas ton treeview je te propose une amélioration a partir d'une analyse donc sois plus clair

Discussions similaires

  1. Demande des explication sur la fonction récursive
    Par nypahe dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 30/04/2009, 21h11
  2. fonction récursive sur string
    Par Jasmine80 dans le forum Langage
    Réponses: 18
    Dernier message: 15/07/2008, 10h09
  3. [POO] Bug sur une fonction récursive : renvoit undefined
    Par zaboug dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/06/2008, 14h10
  4. fonction confirm() qui ne fonctionne pas sur IE7
    Par JackBeauregard dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/06/2008, 09h47
  5. Fonction récursive renvoi sur page d'erreur
    Par peck dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo