Boucles PHP / MySQL - Lenteur du navigateur

Petit nouveau ! | 1 Messages

24 févr. 2009, 16:41

Bonjour,

J'ai quelques interrogations concernant mes boucles PHP car lorsque je souhaite afficher ma page, sous IE cela met 15 secondes et sous FF 5 secondes...De plus les autres pages sans boucles s'affichent rapidement.

Bref Apres avoir désactiver le Javascript, vider le cache, regarder les options du serveur, il me reste que le code PHP.

Voici ma page qui pose problème :

Code : Tout sélectionner

<?php connexion_DB('base_A'); ?> <ul id="avoc"> <?php $retour = mysql_query('SELECT id_avocats,nom,prenom_abr,prenom,site,img_avoc,fonction,activite,domaines,specialisation FROM avocats order by nom'); while ($donnees = mysql_fetch_array($retour)) { ?> <li> <div class="avoc_info"> <p><strong><a href='#demoInline<?php echo $donnees['id_avocats']; ?>' class='lightview' title=":: :: autosize: true, keyboard: false, overlayClose: false, menubar: false "><?php echo $donnees['nom']; ?> <?php echo $donnees['prenom_abr']; ?></a> </strong><br /><?php echo $donnees['site']; ?></p> </div> <?php include ("module_demoinline.php"); ?> <!-- C'est l'affichage avec lightview, du javascript. Je l'ai désactivé, ce n'est pas ça </li> <?php } // Fin de la boucle ?> </ul> <p><strong>Services administratifs :</strong></p> <ul id="admin"> <?php $retour = mysql_query('SELECT id_admin,nom,prenom_abr,prenom,fonction,site FROM admin order by fonction'); while ($donnees = mysql_fetch_array($retour)) { ?> <li> <div class="admin_info"> <p><strong><a href='#Inline<?php echo $donnees['id_admin']; ?>' class='lightview' title=":: :: autosize: true, keyboard: false, overlayClose: false, menubar: false "><?php echo $donnees['nom']; ?> <?php echo $donnees['prenom_abr']; ?></a> </strong><br /><?php echo $donnees['fonction']; ?><br /> <?php echo $donnees['site']; ?></p> </div> <?php include ("module_inline.php"); ?> </li> <?php } // Fin de la boucle ?> </ul> <?php deconnexion_DB(); ?>
Je vous comprends, la relecture est difficile ............... :s

Merci pour votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 févr. 2009, 19:32

Il n'y a pas grand chose à redire sur tes boucles... à moins de quelques millions de lignes à traiter, il n'y a pas de raison pour que cela prenne 15 secondes...

Tu peux optimiser un peu en remplaçant les mysql_fetch_array() par des mysql_fetch_assoc() puisque tu utilises seulement les noms de colonnes (et pas les positions).

Tu peux aussi retirer les colonnes inutilisées de ta requête (ex : "domaines", "specialisation", "activite") et ne sélectionner que les champs dont tu as besoin... mais ca fera pas passer de 15 à 2 sec...

Peut être des lenteurs à la connexion de la base de données ? Tu peux utiliser la fonction microtime() pour vérifier le temps passé entre les différentes parties de ton script (avant la connexion, après la connexion, après la première boucle while, etc.)
En faisant la différence avec le premier tu auras une estimation de la durée d'exécution de chaque partie de ton script php... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

24 févr. 2009, 19:54

Bonjour,

Tu fais un include dans ta boucle, quel est le traitement effectué dans ce fichier inclus?
Quand tout le reste a échoué, lisez le mode d'emploi...

ViPHP
ViPHP | 1996 Messages

24 févr. 2009, 23:54

Bonjour,

Pourquoi tu demandes tout ces informations SELECT id_avocats,nom,prenom_abr,prenom,site,img_avoc,fonction,activite,domaines,specialisation

mais tu n'utilise que (future utilisation?)
  • $donnees['id_avocats'];
    $donnees['nom'];
    $donnees['prenom_abr'];
    $donnees['site'];
Pour savoir qui prends du temps essaye de faire un echo d'un timstamp par exemple. Tu verras qui te prends le plus de ressources.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr