Code : Sélectionner tout - Visualiser dans une fenêtre à part document.forms[0].childNodes[0].sourceIndex
Code : Sélectionner tout - Visualiser dans une fenêtre à part document.forms[0].childNodes[0].sourceIndex
... veux tu faire qqs test, tu verras comme je te l'ai dis même 600 ou 1000 élément la différence est plus qu'infime ...
après a voir les test que tu effectues dessus
si ça prend du temps => affiche une div pendant el traitement , et masque la après
je pense que tu te prends la tete pour pas grand chose sur le coup
a priori même le premier element au niveau sourceIndex est égal si je ne m'abuse à
c'est encore plus simple
Code : Sélectionner tout - Visualiser dans une fenêtre à part var firstElement=document.forms[0].sourceIndex+1
Désolé de me répéter mais c'est une appli pro de saisie en masse, donc les temps de réponse doivent être au poil... Même si je ne gagne que 2/10 de seconde, c'est toujours ça de pris !
Les utilisateurs sont mécontents auj'hui car le navigateur perd environ (sur un PIV à 2Ghz) 3.5s dans un javascript qui boucle sur les 660 éléments de la page (j'ai tracé les temps de réponse).
Je suis OK que 0.2s c'est peu au regard des 3.5s, mais c'est déjà ça de gagné si je peux le faire simplement en récupérant l'index de départ optimal plutôt que de partir de 0...
Pour le reste j'ai d'autres pistes d'opti, mais ça me gave de ne pas trouver de solution à ce petit problème
--> SpaceFrog, navré, mais peux-tu me donner un exemple concret avec le code que j'ai fourni plus haut ?
En tout cas merci de votre aide les gars
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 <script type='text/javascript'> function foo(Obj){ var firstOfForm=document.forms[0].sourceIndex+1; var FormCollection=document.forms[0].all alert("sourceIndex direct : "+Obj.sourceIndex +"\nSourceIndex relatif :" +FormCollection[Obj.sourceIndex-firstOfForm].sourceIndex); } </script> </head> <body> <form> <fieldset> <input type='text' onclick="foo(this)"/> <input type='text' onclick="foo(this)"/> <input type='text' onclick="foo(this)"/> <input type='text' onclick="foo(this)"/> <input type='text' onclick="foo(this)"/> </fieldset> <fieldset> <input type='text' onclick="foo(this)"/> <input type='text' onclick="foo(this)"/> <input type='text' onclick="foo(this)"/> <input type='text' onclick="foo(this)"/> <input type='text' onclick="foo(this)"/> <input type='text' onclick="foo(this)"/> <input type='text' onclick="foo(this)"/> <input type='text' onclick="foo(this)"/> </fieldset> </form> </body> </html>
...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 var tabIndex=new Array(); formulaire=document.forms[0]; //le premier? for(i=0;i<formulaire.elements.length;i++){ tabIndex[formulaire.elements[i].name]=i; } function getIndex(nomchamp){ return tabIndex[nomchamp]; }
Je veux pas te faire pleurer, le code est une vrai cata :
3 JSP imbriquées (expression language + java + HTML + javascript inside ), avec un javascript externalisé de 5000 lignes, très honnêtement j'aurais honte de te filer un tel code
Puis tout ça hors contexte (MVC struts) ça te causera pas trop.
et mon usine à gaz elle ne te plait pas ... ???
pourtant je recupère bine le sourceIndex par rapport au form
J'ai pas encore essayé...
Par contre j'ai transformé la table des objets control (document.form.elements) en table de string (juste le nom du control), ça booste bien et je récup l'index facilement du coup (indexOf()).
Du coup, je me demande si ça va pas suffire à mon bonheur
Merci à tous
Décidément quand ça veut pas : indexOf() opérationnel sur données Array seulement en Jscript >= 1.6... Et devinez quoi ?
Bien vu on tourne en 1.5
Bon c'est pas grave, je me démerde autrement !
a+
ma solution fonctionne ...
et moi je maintiens que tu t'embètes pour pas grand chose exemple ==>
http://www.developpez.net/forums/d61...mance-sous-ie/
puis test simple =>
regarde le nombre d'occurrence donc avec 600 ... même avec des traitements dessus tu serais gagnant , enfin moi j'dis ça je n'ai rien dit hein
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Document sans nom</title> <script type="text/javascript"> var rdv = new Array() var Debut =null; var Fin = null; var test = 999999; function initTableau(){ for(var i = 0; i < 1000000 ; i++){ rdv[i] = i; } } function testTableau(){ Debut = new Date(); var len = rdv.length; var i = 0; while (i < len && rdv[i] != test) { ++i; } Fin = new Date(); alert(Fin-Debut+ "et i : " + i); } function testTableau2(){ Debut = new Date(); var len = rdv.length; for(var i = 0 ; i < len;i++) { if(rdv[i] == test){ break; } } Fin = new Date(); alert(Fin-Debut+ "et i : " + i); } function testTableau3(){ Debut = new Date(); var len = rdv.length; var i = 0; while (i < len && rdv[i] != 500000) { ++i; } Fin = new Date(); alert(Fin-Debut+ "et i : " + i); } function testTableau4(){ Debut = new Date(); var len = rdv.length; while (len) { len-- } Fin = new Date(); alert(Fin-Debut+ "et i : " + len); } </script> </head> <body> <script type="text/javascript"> initTableau(); testTableau(); testTableau2(); testTableau3(); testTableau4(); </script> </body> </html>
J'avoue honteusement que je ne l'ai pas encore essayée...
Faut pas m'en vouloir hein, juste que comme c'est pour le taf, j'ai pas trop le temps de tout expérimenter, et j'ai trouvé une solution satisfaisante (balayage de la table juste pour récup des index, mais comme ça boucle à vide quasiment sans trt, ça booste !) pas trop coûteuse et qui me permet finalement de gagner 45/100s., ce qui peut paraître ridicule à l'échelle humaine, mais diablement important pour les utilisateurs finaux
Mille merci pour votre aide
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager