JavaScript : Complexité des fonctions [Résolu/Fermé]

Signaler
Messages postés
44
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
13 novembre 2012
-
Messages postés
44
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
13 novembre 2012
-
Bonjour à tous,

Je fais encore une fois appel à vous, cette fois ci en Javascript.

J'aimerai savoir si la fonction document.[mon_form].elements.length est une fonction qui recalcule tout à chaque fois qu'on l'emploie ? Est ce plus intéressant de stocker dans une variable le résultat de cette fonction pour un emploi ultlérieur ?

Ensuite, quand on fait document.[mon_form].elements[10] ou document.[mon_form].elements['Le titre'] et que 'Le titre' est en position 10 sur 100 éléments, c'est bien la premiére solution qui est plus optimale en termes de vitesse de traitement ?

Ensuite, j'aimerai savoir dans quel type d'objet des images sont encapsulables pour les dispatcher.
Par exemple pour les objets input, on utilise des formulaires, cela permet de rendre le code moins compliqué.
Etant donné que les formulaires ne marchent pas pour les images, comment peut on faire ? est-ce un manque à java script ?

Voila cela fait beaucoup de question mais elles seront surement utiles aux membres de la communauté intéressés par la complexité de leur code produit.

Merci

8 réponses

Messages postés
233
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
42
Salut,

Je suis pas sur d'avoir tout bien compris ...

Pour ce qui est du temps d'exécution de la propriété length, je ne suis sur de rien ... (jamais vu une question la dessus)...
A priori, length est une propriété et non pas une fonction. Ce qui laisse à penser qu'il est précalculé (donc pas de perte de temps ...)

Pour l'accès aux éléments d'un form, il est bien sur plus rapide d'utiliser son numéro que son nom. Tout simplement par ce qu'ils sont stockés dans l'ordre et qu'il n'a pas la comparaison de texte à faire.

Pour le reste ce n'est pas très clair ... tes pb d'images et d'inputs.
Pour les inputs dans un form, ce n'est pas une question de clarté mais de code.

Pour les images, une balise IMG. Tu peux les mettre dans un div ... ou n'importe quoi d'autre.


Nico
Messages postés
44
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
13 novembre 2012

Merci, tu as répondu à 2/3 de mes questions, merci bien l'ami =D

La 3éme question (la derniére) est assez simple en fait.

Je me demandais si c'était possible de mettre les images (balise <img>) dans un formulaire ?
A priori non.

Je conçois trés bien que les boutons ou champs textes sont mis dans des formulaires pour la gestion des données.
De ce fait, on peut par exemple acceder à document.[mon_Form].elements[XX]
Juste en ayant encapsulé les objets dans des balises <form>
Cela, c'est hyper pratique !


Mon souci, c'est que cela n'existe pas du tout pour les images (à ma connaissance).
On est obligés de passer par documents.images[XX] et donc on perd toute notion de répartition dans des formulaires. Ca devient vite crade quand on a 500 images, je dois faire des calculs de ouf pour retrouver l'image que je veux modifier.

Peut-être qu'une balise spéciale existe pour groupper les images ?
Messages postés
233
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
42
En fait, il faut comprendre comment ça fonctionne ...
l'accès des éléments du formulaire par forms[nomform][element] ne fonctionne en effet QUE pour des éléments input, textarea ...)
Il existe la possibilité d'utiliser <input type='image' src='' /> mais par défaut, en cliquant sur l'image, on valide le formulaire. Il est facile quand même d'empécher l'envoi du form en rajoutant onclick='return false' dans l'input image.

Mais à mon avis, tu t'embête pour pas grand chose.
Pourquoi ne rajoutes-tu pas un ID sur tes images lors de la génération de la page ?
...
<img id='image142' src=' ... ' />
<img id='image143' src=' ... ' />
...


comme ça tu peux toujours les appeler directement en javascript sans te prendre la tête.
document.getElementById( 'image142' )

Mieux, tu te fait une fonction :
function Image( numero )
{
    return document.getElementById( 'image'+numero );
}


et pour l'appeler :
Image( 142 ).... ;
Messages postés
44
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
13 novembre 2012

Merci pour tes réponses.

Su tu veux, je ne peux pas faire cela pour des raisons de performance.
En effet, j'avais demandé quels étaient les impacts mémoire si on utilisait les fonction Javascript pour trouver les elements en fonction de leur nom, malheureuseument c'est assez gourmand.

C'est pour cela que j'aurais voulu les dispatcher en groupes, puis choisir document.[groupe1].images[0], images[1]...
Cela aurait été bénéfique en terme de vitesse.
Ma page est complétement remplie de petits curseurs pour chaque enregistrement reçu de la base de données.
SI j'emploie ces fonction, ca laggue du tonerre !

Merci pour tes réponses, il n'existe donc pas de formulaire qui encapsule les images pour éditer leur propriétés.
Je conserve mes calculs avec les document.elements.length pour me déplacer de formulaire en formulaire.
Messages postés
233
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
42
Euh ...

Je comprend pas bien ou tu veux en venir avec tes images ...

tu veux éditer quoi comme propriété ?
et tu le fait sur toutes les images en même temps ?

t'aurai pas un exemple ? une page pour montrer ce que c'est ?
Messages postés
44
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
13 novembre 2012

Dans une page, pour chaque ligne retournée par une requête, j'ai un bouton et une image.

Quand on ne fait rien, l'image est un carré blanc.
Dés que l'on clique sur le bouton d'une ligne, cela lance un traitement en fonction de la ligne.
Pendant ce traitement, je change le carré blanc par un sablier.
Une fois le traitement fini, je remets le carré blanc.

J'ai 3 groupes de lignes retournées. Je peux en avoir X, c'est en fonction de la base de donnéees...

Dans le premier groupe j'ai 20 lignes admettons, dans le deuxiéme 20 lignes, dans le 3éme 20lignes.

Si je cliques sur le bouton 2 du groupe de lignes 2 (22 éme image de la page), je sais pas du tout comment atterir sur mon image.
J'aurais pu mettre image_22 comme ID, mais fonction getElementsByID ne m'interesse plus vu son coût mémoire pour acceder au champ.

Ce que je fais : des maths :

J'ai le numéro de ligne : 2 (ca j'ai le droit je m'y retrouve avec mes formulaires, je le fixe moi meme en générant les lignes)
Ca me donne 2, 2 : la deuxiéme ligne du groupe 2 d'enregistrements.
Je passe moi même les paramétres lors de la génération du code HTML.

Ensuite je fais cela pour trouver mon image :

nb = documents.images.length : le nombre total d'images de la page : 80
En effet, j'ai des images avant mes 3 groupes pour la présentation de la page.
Bon ca je le fixe dans mon javascript, on peut pas faire autrement. On partira de la fin, vous allez voir ...

Je suis obligé de faire :

nb - document.form3.elements.length - document.form2.elements.length + 2

Pour trouver la position de mon image.
Ca ne rame pas du tout, c'est instantané, contrairement à getElementsByID.

Explication : On a dit que j'étais dans le 2éme groupe, 2éme ligne.
Je prends donc la quantité totale d'images, à laquelle je soustrait la quantité de lignes des deux groupes d'enregistrements (le 2 et le 3) puis j'ajoute l'index du groupe courant (2).

C'est pour cela que j'aurais aimé faire document.[form2].images[2].src='sablier'
Ca aurait été été plus simple.


Je vous offre des aspirines si vous voulez :)
Messages postés
233
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
8 septembre 2011
42
3 choses :

- a priori, il n'y a pas de boucle sur la recherche des images (genre il faut modifier 200 images en même temps), donc je ne vois pas bien le problème de performance.

- si c'est juste pour aller changer la source d'une image en particulier, le getElementById est forcément beaucoup plus rapide qu'un calcul qui va chercher des valeurs on ne sait où dans plusieurs formulaires.

- pour ce qui est de la numérotation des images rien ne t'empêche de les numéroter : image_2_2
Messages postés
44
Date d'inscription
mardi 27 novembre 2007
Statut
Membre
Dernière intervention
13 novembre 2012

Meric à tous :)