Problème de script faisant ralentir ie

gregusse Messages postés 7 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 6 août 2009 - 5 août 2009 à 16:33
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 - 6 août 2009 à 11:10
Bonjour !

J'ai un problème sur un script que j'ai codé. J'ai le message de IE "un script fait ralentir internet explorer ...". Apparemment c'est à cause du nombre d'instructions (au bout de 5000000 ie fait apparaitre le message). Il n'apparaît pas régulièrement mais je souhaite qu'il n'apparaisse plus du tout.

Voila le message s'affiche de temps en temps lorsque je clique sur le bouton enregistrement qui appelle le submit à la fin de la fonction javascript. Avant le submit il y a un contrôle qui ai fait sur les différentes colonnes d'un tableau :

/**
* Fonction qui permet d'enregistrer une trame demande Essai.
*/
function enregistrementTrame(etat) {
if (checkDataM2M12() && checkDateMois() && checkSelectEdp()) {
//si etat == 1 on ajoute la trame à la base en etat Projet sinon en etat Envoyée.
if (etat == 1) {
document.getElementById('etatEnregistrement').value = "Projet";
document.getElementById('forward').value = document.getElementById('typeAction').value;
var texteAlert = "<%=keys.getMessage("js.enregistrer.trame")%> " + " ?";
if (confirm(texteAlert)) {
activeChamps();
}
} else if (etat == 2){
document.getElementById('etatEnregistrement').value = "Envoyée";
document.getElementById('forward').value = document.getElementById('typeAction').value;
var texteAlert = "<%=keys.getMessage("js.envoyerCOPM.trame")%> " + " ?";
if (confirm(texteAlert)) {
activeChamps();
}
} else {
document.getElementById('forward').value = "toPreview";
activeChamps();
}
document.forms['demandeEssaiCNPEform'].submit();
}
}

//Permet d'activer les champs disabled pour prendre en compte la valeur.
function activeChamps() {
document.getElementById('hiddenLibelleEdp').value =
document.getElementById('selectEdp').options[document.getElementById('selectEdp').selectedIndex].text;
document.getElementById('calendar').disabled = false;
}

//Vérifie si une Edp est sélectionnée dans la liste déroulante.
function checkSelectEdp() {
var bIsSelect = true;
if (document.getElementById("selectEdp").value == "") {
var texteAlert = "<%=keys.getMessage("js.error.champ.obligatoire")%> " + "Tranche (EDP)";
alert(texteAlert);
bIsSelect = false;
}
return bIsSelect;
}

//Vérifie si le mois est au bon format.
function checkDateMois() {
var moisDe = document.getElementById("textMoisDe").value;
var bIsDateMois = true;
if (!oUtils._isFormatMois(moisDe)) {
var texteAlert = "<%=keys.getMessage("js.error.trame.mois.format")%> " + "DU MOIS DE";
alert(texteAlert);
bIsDateMois = false;
}
return bIsDateMois;
}

//Vérifie le tableau contenant les tramesEssaiPlanifM2M12.
function checkDataM2M12() {
var m2m3 = document.getElementsByName("textDateEnvisageeM2ToM3");
var m4m6 = document.getElementsByName("textDateEnvisageeM4ToM6");
var m7m12 = document.getElementsByName("textDateEnvisageeM7ToM12");
var dateTot = document.getElementsByName("textPlageToleranceDateTot");
var dateTard = document.getElementsByName("textPlageToleranceDateTard");
for (var i=0, len = m2m3.length; i < len; ++i) {
if (m2m3[i].value != "" && !oUtils._isDate(m2m3[i].value)) {
var texteAlert = "<%=keys.getMessage("js.error.trame.date.format")%> " + "Date envisagée M+2 à M+3";
alert(texteAlert);
return false;
} else if (m4m6[i].value != "" && !oUtils._isDate(m4m6[i].value) ) {
var texteAlert = "<%=keys.getMessage("js.error.trame.date.format")%> " + "Date envisagée M+4 à M+6";
alert(texteAlert);
return false;
} else if (m7m12[i].value != "" && !oUtils._isDate(m7m12[i].value)) {
var texteAlert = "<%=keys.getMessage("js.error.trame.date.format")%> " + "Date envisagée M+7 à M+12";
alert(texteAlert);
return false;
} else if (dateTot[i].value != "" && !oUtils._isDate(dateTot[i].value)) {
var texteAlert = "<%=keys.getMessage("js.error.trame.date.format")%> " + "Plage de tolérance Date au plus tôt";
alert(texteAlert);
return false;
} else if (dateTard[i].value != "" && !oUtils._isDate(dateTard[i].value)) {
var texteAlert = "<%=keys.getMessage("js.error.trame.date.format")%> " + "Plage de tolérance Date au plus tard";
alert(texteAlert);
return false;
}
}
return true;
}


Voila le code qui est appelé avant le submit. il y a sûrement beaucoup choses à améliorer, c'est sûr ...
Par contre, le message apparaît lorsque j'effectue des modifs sur la page avant.

Si quelqu'un peut m'aider, c'est avec joie !

5 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
5 août 2009 à 16:56
Bonjour,

comment on teste ?
il y a de l'asp, comment on devine ce que ça génère ?

ensuite, il faut qu'on saisisse le html ?
correspondra-t-il à ce que vous avez chez vous ?

>>le message apparaît lorsque j'effectue
>>des modifs sur la page avant.
sur la page précédente ?
dans ce cas c'est la page précédente
qu'il nous faudrait
ou alors je n'ai pas compris ?

donnez nous l'extrait du html résultant
le nécessaire, tout le nécessaire,
mais rien que le nécessaire !
3698574 lignes ça décourage.

au 1er coup d'oeil, je n'ai que survolé et encore,
pas vu grand chose qui expliquerait ce
temps de traitement trop long
le for peut être ?
for ( var i=0; i<m2m3.length; ++i) {
je dis peut-être exactement le contraire
de ce qu'il faut.
mais bon... perso je ne vois quasi
rien sans tester.

Cordialement [mon Site] [M'écrire] Bul
0
gregusse Messages postés 7 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 6 août 2009
5 août 2009 à 17:42
Oui c'est vrai, excusez moi. Mais mon code est assez long et comme j'ai du mal à localiser l'erreur je ne voulais pas mettre plein de code. Je vais essayer de synthétiser

Je développe en J2EE avec struts.

En fait il y a 2 tableaux dans cette page :
J'ai fais un objet javascript pour le premier. C'est un tableau dynamique. Je peux ajouter des lignes en rentrant des données dans un autre et en cliquant sur ajouter.

Dans ce tableau l'utilisateur peut ajouter des lignes en cliquant sur "ajouter" :

[javascript:ajouter(); Ajouter];

Ca appelle ensuite la méthode de l'objet javascript "_addLine()"

_addLine: function()
{
//On vérifie les différentes règles.
if (!this._checkMaxLine())return;
if (!this._checkData())return;
var iIndex = this._lineEmpty();
var tableWithTitle = this._getTableWithTitle();
this._fillLine(iIndex);
tableWithTitle[iIndex].style.display = "block";

},

il y a un traitement derrière qui vérifie les données du tableau.
Ce qu'il faut savoir c'est qu'au chargement de la page je charge 20 lignes dans le tableau (C'est une liste instancié en java dans l'action). J'utilise le style.display de l'élément pour masquer une ligne ou la faire apparaître. Donc les 20 lignes sont toujours présentent sur la page elles sont simplement cachées grâce a style.

Le deuxième tableau à 6 lignes et 10 colonnes. Je peux rentrer des données dedans. Chaque balise <td> contient des balises <html:text>. Les données sont vérifiées en javascript dans le code du message précédent.

Le problème de mon message n'intervient que quand je manipule le premier tableau. Mais ce que je ne comprends pas c'est que le message apparaît uniquement quand je clique sur enregistrement qui est une fonction qui n'a rien à voir avec la fonction ajouter.

C'est difficile d'envoyer du code. Pour l'ajout d'une ligne j'ai différentes vérifications à faire et ça représente pas mal de ligne. Il faudrait presque que j'envoie mon code global comme l'erreur peut intervenir de n'importe quelle fonction ?

Je pense que ca ne sert pas à grand chose mon explication . S' il y a moyen d'envoyer pas mal de code pour que quelqu'un puisse regarder, c'est avec joie.
Merci
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
6 août 2009 à 05:27
plutôt une adresse où tester ?
et vous avez debugger ?
0
gregusse Messages postés 7 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 6 août 2009
6 août 2009 à 11:00
Mon problème est qu'il s'agit s'une application que je développe en local donc pas d'adresse où tester.

Oui sinon j'ai débuggé mais je ne trouve pas où se situe mon problème. J'ai même changé le clé de la base de registre pour passer les instructions à 6000000 et dans ce cas ça fonctionnne, je n'ai plus le message. Mais le problème est que je ne peux pas dire au client de faire ça.

Merci pour votre aide. Je vais essayer de reprendre mon code.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
6 août 2009 à 11:10
il vous faut localiser précisément le souci
ne faire que l'extrait du nécessaire :
un champs et une fonction ?
d'ailleurs en procédant ainsi on résout
souvent tout seul.
0
Rejoignez-nous