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

Langage PHP Discussion :

[Tableaux] Affichage d'un agenda très lent


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [Tableaux] Affichage d'un agenda très lent
    Bonjour à toutes et à tous.

    Voila j'ai fais un agenda en php avec évènements dans une base MySQL. j'ai d'abord fais un affichage de la journée. Il est un peu lent mais c'est encore correct. Puis je me suis lancé dans un semainier et là c'est une catastrophe (plus de 4 secondes pour s'afficher en locale !!!). Je pense que ma méthode n'est pas bonne.

    Pour mon agenda quotidien, j'ai fais une boucle for avec un tableau qui affiche chaque demi-heure. J'ai extrait mes évènements dans une variable tableau et à chaque demi-heure je consulte l'intégralité de ma variable tableau et je vérifie si un évènement correspond à la céllule du tableau. Mais même sans évènement c'est assez lent.

    Pour mon hebdomadaire j'ai tout simplement multiplié c'est fonction par 5.

    SVP, ne me jetter pas trop de cailloux, j'ai la peau qui marque ;-)

    Merci d'avance pour toute l'aide que vous pourrez m'accorder.

  2. #2
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par dam_ff Voir le message
    Puis je me suis lancé dans un semainier
    Hebdomadaire ça sonne mieux ^^'

    C'est pas très clair ton procédé, tu "affiches" chaque demi-heure, ou tu recalcule chaque demi-heure ?
    Si tu extrait tes événements d'un tableau, à quoi sert la base ? C'est un intermédiaire ?


    Après si tu mets longtemps, ça peut venir de plusieurs facteurs :

    - requêtes SQL non optimisées
    - code PHP non optimisé
    - syntaxe PHP non optimisée ( par exemple, " " oblige PHP à vérifier le contenu, pas ' ', pertes de temps ! )
    - puissance de ton PC, et oui, si t'es en local avec EasyPHP, Apache n'a pas la même puissance que sur un vrai serveur, ça parait évident, mais ça joue !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour Er3van.

    Je fait une boucle x10 en démarrant à 8h et en finissant à 20h
    Avant de construire mon tableau, je fais une requête pour avoir tous mes évènements dans une variable (en fait pour ne pas faire 10 requêtes)
    dans ma boucle j'affiche l'heure x et l'heure xh30
    je vérifie à chaque fois si j'ai dans ma variable tableau un évènement qui colle.

    Voila, j'espère avoir été claire...

    Pour le poste qui me fais office de serveur de dev, c'est un athlon 64x2 3800+ avec 1go de ram, winXp SP2, EasyPHP 1.8

    ma requête est une bête de requête (pour moi)

    Merci de ton aide.

  4. #4
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Donc en fait, j'ai deux façons de comprendre ( de mon point de vue ) ton énoncé, donc pour être sûr de bien comprendre ton problème si tu pouvais m'éclairer....

    Première interprétation :
    Ton "agenda" sert à afficher les tâches ayant lieu à l'instant présent ? Avec une sorte de pup_up qui apparait à l'écran ?
    Par exemple, si ton événement à lieu à 11H aujourd'hui, il est censé t'afficher l'événement plus ou moins maintenant ( au moment où j'écris ) ?

    Si c'est ça, c'est pas vraiment un "agenda", puisqu'un "agenda" sert à prendre des notes quotidienne, là c'est plutôt un rappel-événement non ?

    Et donc ton script PHP tourne en boucle, comme un traitement batch ??


    Deuxième interprétation :
    Ton tableau contient une liste de chiffre, correspondant à des horaires comprises en 8h et 20h ( par pallier de 30 minutes ).
    Et tu fais une requêtes qui teste, si à une date comprise dans ton tableau, il y a un événement correspondant dans ta base, si oui, ça remplira une case de ton agenda ( qui pour le coup est une sorte d'emploi du temps ? ).
    Tu ne fais un affichage que sur demande, tu ne lances ton script qu'à cette occasion.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Ta deuxième interprétation est la plus proche :

    Je construit un tableau HTML avec les heures à gauche et des lignes toutes les demi heures. Au préalable, j'ai fait une requête SQL pour extraire tous les évènements du jour sélectionné que je met dans une variable tableau. A chaque ligne de mon tableau agenda, je fais un if en consultant l'intégralité des enregistrements de ma variable tableau pour afficher les évènements correspondant. Un bête d'agenda quoi...

  6. #6
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Hum, dans ta requête SQL, si tes éléments sont ordonnées, pas besoin de parcourir l'intégralité...

    A toi d'optimiser tes boucles.

    C'est un problème d'algorithmie, pas de code.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Hum ... Quoi ?

    Je fais une requête SQL avec un where à la date demandé... si j'obtient 3 évènement, j'ai donc une variable $evenement[x] avec 3 enregistrements.
    à chaque ligne je parcour ma variable (je regarde si l'heure de mon évènement correspond à l'heure que j'affiche). Mais c'est lent même si il n'y a rien dans ma variable...

    Mes boucles c'est du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for ($i=8;$i<=20;$i++) {
      echo "<td>$i H</td>";
      $compteur = 0;
      foreach ($evenement as $value) {
        if ($evenheure[$compteur] == $i) {
          echo "<td>". $eventitre[$compteur] ."</td>";
        }
        $compteur ++;    
      }
    }
    en gros

  8. #8
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Je te conseillerai plutôt :

    Tu fais ta requête.
    Tu affiches chaque événement.

    Exemple :
    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
    $query = 'SELECT heure_evenement, sujet_evenement FROM evenement' ;
    $result = mysql_query($query) ;
     
    $j = 8 ;
    while ( $line = mysql_fetch_array($query) ) {
          $i = line['heure_evenement'] ;
          if ( $i > $j ) {
               while ( $j < $i ) {
                     echo '<td>'.$j.'</td><td></td>' ;
                     $j++ ;
               }
          }
          $j = $i ;
          echo '<td>'.$i.'</td>' ;
          echo '<td>'.line['sujet_evenement'].'</td>."\n" ; // "\n" : Pour l'affichage plus propre du code source
    }
    while ( $j < 21 ) {
         echo '<td>'.$j.'</td><td></td>' ;
    }
    Et c'est bcp plus rapide à mon avis.
    Ceci étant je peux pas tester, c'est peut-être faux

    }

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    oh Oh ! Pas bête ! je vais essayer ça ...

  10. #10
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Sinon ça dépend de comment tu structures ta bases, si tu supprimes ou non les événements passés ( automatiquement avec un script de nettoyage par exemple ) pour pas encombrer ta base.
    Et si tu ne fais un planning qu'hebodmadaire tu peux meme dans ta base inclure les heures où il n'y a pas d'événement, comme ça tu peux même éviter le traitement en PHP.

    Mais tout dépend de comment tu gères ta base encore une fois...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage des 0 sur un graphique très lent
    Par Vivi127 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 12/09/2012, 16h38
  2. [treeView] Affichage très lent sous FF 3
    Par vg33 dans le forum jQuery
    Réponses: 4
    Dernier message: 28/04/2009, 19h34
  3. Affichage de ma page très lent
    Par Aquellito dans le forum ASP
    Réponses: 10
    Dernier message: 04/12/2008, 09h15
  4. Affichage très lent Base importante
    Par marcGR dans le forum Access
    Réponses: 6
    Dernier message: 25/03/2008, 07h41
  5. [Tableaux] echo et print très très lents...
    Par FMaz dans le forum Langage
    Réponses: 13
    Dernier message: 08/10/2006, 06h34

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