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 :

Vitesse de chargement


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Points : 81
    Points
    81
    Par défaut Vitesse de chargement
    Bonjour à tous, je précise que je développe en java (pages jsp).
    J'appelle une fonction java script sur l'évènement onload de ma page web qui met beaucoup trop de temps à se faire.

    Ce qui prend du temps dans cette fonction, ce sont les deux boucles ci dessous:
    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
     
    var aNames = new Array();
    var aID = new Array();
    var aCont = new Array();
    var aContID = new Array();
     
    <%for(int i = 0; i < listeC.size(); i++){%>			
         aCont.push("<%= listeC.get(i).getContactnom()%>" +"/"+ "<%= listeC.get(i).getContactprenom() %>")	
         aContID.push("<%=listeC.get(i).getContactid()%>")			
    <%}%>
     
    <%for(int i = 0; i < liste.size(); i++){%>			
         aNames.push("<%= liste.get(i).getSocieteRaison1()%>" +"/"+ "<%= liste.get(i).getSocieteRaison2() %>" +"/"+ "<%= liste.get(i).getSocieteCodePostal() %>")	
         aID.push("<%=liste.get(i).getSocieteId()%>")			
    <%}%>
    listeC est une liste de contact et liste une liste de société. Ces deux listes sont très grosse (toutes les données de la base quasiment) alors comment pourrais-je améliorer ce chargement?
    Merci d'avance!

  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
    Points : 4 835
    Points
    4 835
    Par défaut
    remplace déja ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(int i = 0; i < listeC.size(); i++){
    ...
    }
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i = 0, l = listeC.length; i < l; i++)
    ce qui évitera a chaque itération de recompter la taille de ton tableau ...
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  3. #3
    Membre régulier Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Points : 81
    Points
    81
    Par défaut
    merci pour ta réponse le_chomeur!!

    Sauf que listeC et liste sont des listes java.
    Donc listeC.length est impossible dans ce cas la.
    Tous le code qui se trouve entre <%%> est du code java.

    Je t'explique:
    Je récupère deux listes java que je doit envoyer à du code javascript en créant à partir de ces listes, deux listes de noms et d'ID et la création de ces listes avec la boucle est trop longue.

    aNames et aCont sont les listes de nom
    aID et aContID sont les liste d'ID

  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
    Points : 4 835
    Points
    4 835
    Par défaut
    dans tous les langage , la ligne que je t'ai donné optimise tous les langages ...
    peux tu nous montrer le code généré ??
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  5. #5
    Membre régulier Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Points : 81
    Points
    81
    Par défaut
    Alors premièrement l'erreur généré par listeC.length:
    "An error occurred at line: 36 in the jsp file: /page/detailsEvenement.jsp
    Generated servlet error:
    listeC.length cannot be resolved or is not a field"

    Ensuite, le code généré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    aNames.push("blabla" +"/"+ "" +"/"+ "31016")	
    aID.push("552")			
    aNames.push("encoreblabla" +"/"+ "" +"/"+ "33600")	
    aID.push("60277")
     
    aCont.push("ZREZR" +"/"+ "zetret")	
    aContID.push("88837")					   			
    aCont.push("ZREZR" +"/"+ "zetret")	
    aContID.push("88838")
    Je ne te met pas les 1664 contacts et 200 société des listes ca ferait beaucoup.
    Mais bizarrement, l'erreur est généré à la compilation, mais ne créé pas de problème sur la page. Les listes sont crée tout correctement, mais le temps de chargement n'a pas diminué.

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    pourquoi pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aNames[indice]="blabla" +"/"+ "" +"/"+ "31016"
    dans la boucle en incrémentant l'indice ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    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
    Points : 4 835
    Points
    4 835
    Par défaut
    lol

    An error occurred at line: 36 in the jsp file: /page/detailsEvenement.jsp
    Generated servlet error:
    listeC.length cannot be resolved or is not a field"
    length est une propriété javascript et non java pour ta génération utilise size() ...

    pourquoi stockes tu tous tes élément dans un tableau plutôt que de les écrires directement dans la partie htlm ??
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    ou concatènes les avec un separateur ...
    un split coté javascript sera plus rapide ..
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  9. #9
    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
    Points : 4 835
    Points
    4 835
    Par défaut
    je ne vois toujours pas l'intérêt de les stocker dans un tableau si c'est pour les utiliser dans des liste déroulantes par la suite
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  10. #10
    Membre régulier Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Points : 81
    Points
    81
    Par défaut
    Oui pour length c'est ce que je te disais!

    Je stocke les éléments dans un tableau pour m'en servir pour un champ de type suggest. A chaque lettre tapé, le champ cherche dans le tableau les valeurs correspondantes.

    Pour ca : aNames[indice]="blabla" +"/"+ "" +"/"+ "31016"
    J'avais déjà essayé pas mal de chose et la seule chose qui fonctionne pour faire un tableau c'est la fonction push(). Tout le reste crée des erreurs.

    Ne pensez-vous pas que le problème vienne de la taille de ma liste en entré, et que le javascript n'y peut pas grand chose??

    Ca fait un bout de temps que je suis dessus et je ne sais plus trop quoi faire. Ce qui est dommage puisque le programme fonctionne sans problème, c'est juste le temps de chargement.

  11. #11
    Membre régulier Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Points : 81
    Points
    81
    Par défaut
    PS : je dit ca car j'ai essayé également de créer mes listes côté code java, et le temps de chargement reste le même

  12. #12
    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
    Points : 4 835
    Points
    4 835
    Par défaut
    le problème ne vient pas du javascript , voici deux exemple exécuté en moins d'une seconde sur une itération chacune de 1000 :

    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
     
    <!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">
    	function BigListe(){
    		var monSelect = document.getElementById("toto");
    		for(var i = 0 ; i < 1000 ; i++){
    			new createOption(monSelect,i);
    		}
    	}
     
    	function createOption(monSelect,i){
    		var d = document;
    		var NewOption =	d.createElement('option');
    		//( un peu barbare mais bon  ;) )
    		NewOption.innerHTML = i;
    		NewOption.value = i;
    		//On ajoute l'item en tout premier
    		monSelect.insertBefore( NewOption , monSelect.firstChild );
    	}
     
    	var monTable = new Array();
    	function BigListeInTable(){
    		for(var i = 0 ; i < 1000 ; i++){
    			new createOptionTable(i);
    		}
    	}
     
    		function createOptionTable(i){
    			monTable[i] = i ;
    		}
    </script>
    </head>
     
    <body>
    <select id="toto">
    </select>
    <script type="text/javascript">BigListe();BigListeInTable();alert(monTable.length);</script>
    </body>
    </html>
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    concatener + splitter est la plus rapide des methodes ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  14. #14
    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
    Points : 4 835
    Points
    4 835
    Par défaut
    avec une expression régulière pour effectuer la recherche sur la string ?

    tu penses que cela serait plus rapide qu'une simple méthode de recherche a bulle sur un tableau ??

    hum hum à tester
    est ton ami fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes

    Premier ministre du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts )

  15. #15
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    je parle du traitement de mise en tableau ...

    concaténer coté serveur (peut être une instruction à cet effet ?)
    et splitter coté client
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  16. #16
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Je stocke les éléments dans un tableau pour m'en servir pour un champ de type suggest. A chaque lettre tapé, le champ cherche dans le tableau les valeurs correspondantes.
    A mon humble avis, ca sera beaucoup plus rapide pour toi de faire une requete à chaque lettre tapée pour afficher une dizaine de propositions possibles commençant par cette lettre, plutot que de chercher a récupérer toutes les possibilités d'un coup et de les conserver en mémoire...

  17. #17
    Membre régulier Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Points : 81
    Points
    81
    Par défaut
    concaténer coté serveur (peut être une instruction à cet effet ?)
    et splitter coté client
    Que veut tu dire par la SpaceFrog? peut tu me mettre un petit exemple de split!

    A mon humble avis, ca sera beaucoup plus rapide pour toi de faire une requete à chaque lettre tapée pour afficher une dizaine de propositions possibles commençant par cette lettre, plutot que de chercher a récupérer toutes les possibilités d'un coup et de les conserver en mémoire...
    Ceci voudrait dire qu'à chaque lettre, je devrais rafraichir ma page pour récupérer une dizaine de données! Ce ne serait pas top je pense!

  18. #18
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 670
    Points
    66 670
    Billets dans le blog
    1
    Par défaut
    arranges toi pour concatener tes valeurs coté serveur afin d'obteniri une chaien de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var Chaine="sdfqsdf;dsfqsdfdsf;sdqfsdfsdf;qsdf;dsfqdsfqdsf;dsf;;dsf;dfs;sqdf;qdsf"
    var TabChaine=Chaine.split(';')
     
    alert (Chaine[0])
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  19. #19
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Ceci voudrait dire qu'à chaque lettre, je devrais rafraichir ma page pour récupérer une dizaine de données! Ce ne serait pas top je pense!
    Non !

    En utilisant l'Ajax, a chaque fius que l'utilisateur tape une touche, tu récupères ce qu'il a commencé a écrire, tu envoies une requête http avec ces données et tu récupères la dizaine de propositions qui vont bien sans changer de page. Te reste plus après a les afficher sous ton input.

    Jette un oeil ici pour plus de détails sur comment réaliser une auto-complétion en Ajax

  20. #20
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    mets le script en fin de page.
    java->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%if(i%100==0)out.flush();%>
    au moins, tu auras des données de temps en temps au lieu d'une page blanche.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 16
    Dernier message: 23/07/2009, 10h55
  2. Améliorer la vitesse de chargement des images
    Par danielhagnoul dans le forum jQuery
    Réponses: 2
    Dernier message: 05/03/2009, 09h07
  3. Vitesse de chargement de ma requête
    Par Mors_Ubyte dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/07/2008, 13h57
  4. [EDI][D2005]Vitesse de chargement d'assembly au debug
    Par sur_uix dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 12/12/2005, 17h49
  5. Vitesse de chargement d'une image jpg ?
    Par ybruant dans le forum Langage
    Réponses: 6
    Dernier message: 16/11/2004, 20h42

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