Page 1 sur 1

Temps de chargement d'une page anormalement long

Posté : 07 déc. 2010, 11:04
par Estecado
Bonjour,

je suis actuellement en train de reprendre une page php qui génère un caddie d'articles. Le problème de cette page est qu'elle met un temps fout à se charger alors que le temps de chargement des autres pages du site est correct.

Je viens de checked les requêtes et pour l'instant je n'en ai pas vu d'assez importante pour causer autant de ralentissement...

Si vous avez une idée je suis preneur ;)

Voilà le code du panier :

Code : Tout sélectionner

<!-- Tableau panier--> <table cellpadding="0" cellspacing="0" id="TablePanier" summary="Récapitulatif des pièces détachées de votre panier"> <thead> <tr> <th id="produit">Pièce</th> <th id="etat">Etat</th> <th id="ref">Référence</th> <th id="quantite">Quantité</th> <!--<th id="ht"><abbr title="Hors Taxes">H.T</abbr></th> --> <th id="ttc"><abbr title="Toutes Taxes Comprises">T.T.C</abbr></th> <th id="suppr"><img src="images/corbeille-blanc.jpg" alt="Supprimer" width="19" height="24" /></th> </tr> </thead> <tbody> <? if(isset($SELECTION)){ $trouver = 'non'; session_register('FRAISPORT'); $ligne = ''; $idpart = ''; $poids = 0; $fraisport = 0; //-- Construction de la condition -- $condition_part = ' id_part != 0'; $tab_part = array(); foreach($SELECTION as $idpiece => $nbre){ // recherche des particulier vendant chacune des pièces du panier $r_part = mysql_result(mysql_query('SELECT id_part FROM boutique_piece WHERE id_p='.$idpiece),0); if(!in_array($r_part, $tab_part)){ // ajout le particulier uniquement s'il n'est pas déjà dans le tableau $tab_part[] = $r_part; } } foreach($tab_part as $value){ // parcours du nouveau tableau de particulier -- $condition_part .= ' OR id_part = '.$value; } //--Selection de tous les particuliers -- $sql = "SELECT nom, id_part, adresse, cp, ville, horaires, tel FROM casse_part WHERE ".$condition_part; //echo $sql; $rpart = mysql_query($sql); //-- Boucle sur les particuliers/partenaires while($rowpart = mysql_fetch_assoc($rpart)){ if($trouver != 'non'){ //-- Affichage du particulier et des pièces correspondantes $trouver = 'non'; echo $ligne; $ligne=''; //-- Remise à zero des frais de port pr le partenaire suivant $fraisport = 0; $poids = 0; } //-- Boucle sur les article contenu dans la caddie -- foreach($SELECTION as $idpiece => $nbre){ if($idpiece != ''){ //-- Selection de l'annonce ayant l'identifiant contenu dans le tableau-- $rpiece = mysql_query("SELECT id_part, id_typep, id_marque, etat, modele, quantite, carosserie, prix, poid, id_piece, id_p FROM boutique_piece WHERE id_p=".$idpiece); $rowpiece = mysql_fetch_assoc($rpiece); if($rowpiece['id_part'] == $rowpart['id_part']){ //-- Comparaison de l'id_part des articles demandé et de l'id_part de la boucle //-- Test si c'est la première fois qu'on trouve une pièce du panier appartenant à ce partenaire-- if($idpart != $rowpart['id_part']){ //--Nombre de partenaire -- $_SESSION['NBPART'] = $_SESSION['NBPART']+1; //-- Création d'une variable session pr sauvegarder le montant total pr ce particulier-- $amount = "montant".$rowpart['id_part']; $_SESSION[$amount] = 0; //-- On remplit la ligne d'entête -- $ligne .= "<tr><td colspan=\"6\" class=\"panierPart\">".$rowpart['nom']."<img src=\"images/information.png\" alt=\"".$rowpart['nom']."\" title=\"".$rowpart['nom']." ".$rowpart['adresse']." ".$rowpart['cp']." ".$rowpart['ville']." Horaires d'ouverture: ".str_replace('<br>', '',$rowpart['horaires'])." Tel: ".$rowpart['tel']."\" /></a></td></tr>"; //--Sauvegarde de l'id-partenaire pr comparaison-- $idpart = $rowpart['id_part']; } //--Récupération du nom de la piece -- $nom_piece = mysql_result(mysql_query("SELECT piece FROM casse_piece WHERE id_piece=".$rowpiece['id_piece'],0)); $trouver = 'oui'; //--Récupération du nom de la marque -- $nom_marque = mysql_result(mysql_query("SELECT marque FROM casse_marque WHERE id=".$rowpiece['id_marque']),0); //--Récupération de l'état-- $lbl_typep = mysql_result(mysql_query("SELECT lbl_typep FROM boutique_typep where id_typep=".$rowpiece['id_typep']),0); //-- Sortie des info dans le tableau -- $ref =(!empty($rowpiece['carosserie']))? $rowpiece['carosserie']: "&nbsp"; $ligne .= " <tr> <td headers='produit' class='first'><a href=\"detail.php?id=".$rowpiece['id_p']."\">".$nom_piece." ".$nom_marque."</a></td> <td headers='etat'>".$lbl_typep."</td> <td headers='ref'>".$ref."</td> "; //-- Gestion stock-- if(isset($_POST['quantite'])){ //Test si une nouvelle quantite a été demandé via le panier //-- MAJ de la variable session panier-- $SELECTION[$rowpiece['id_p']] = $_POST['quantite']; //-- Si oui maj de la table temp-- $nbre = $_POST['quantite']; mysql_query("UPDATE boutique_temp SET quantite='".$_POST['quantite']."' WHERE id_p=".$rowpiece['id_p']." AND ip_part='".$_SERVER["REMOTE_ADDR"]."'"); } //--Calcul du soustotal pour ce partenaire-- $_SESSION[$amount] = $_SESSION[$amount]+ ($rowpiece['prix']*$nbre); //-- Calcul du poids-- $poids = $poids + ($rowpiece['poid']*$nbre); //-- Calcul du total -- $total = $total + ($rowpiece['prix']*$nbre); //-- On calcule la quantite total de cette piece commandé-- $sql = "SELECT quantite FROM boutique_temp WHERE id_p ='".$rowpiece['id_p']."'"; $c = mysql_query($sql); if(mysql_num_rows($c) > 0){ while($l=mysql_fetch_assoc($c)){ $autre = $autre + $l['quantite']; //-- $autre et la quantité de piece demandé par d'autre part } } //-- On calcul la quantité disponible pour cette piece $nbrestant = $rowpiece['quantite'] - $autre; $dispo = $nbrestant + $nbre; //-- Le select prend le nbre demandé et affiche les quantité encore disponible-- $ligne .= " <td headers='quantite'> <select name=\"quantite\" onchange=\"submit(this.form)\">"; for($i=1;$i <= $dispo; $i++){ $selected = ($i == $nbre)? "selected=\"selected\"": ""; $ligne .= "<option value=\"".$i."\" ".$selected.">".$i."</option>"; } $ligne .= "</select> </td>"; $dispo = 0; $autre = 0; $nbrestant = 0; //-- Calcul et affiche le prix pour le nbre de piece demandé-- $ligne .= " <td headers='ttc'>".$rowpiece['prix']*$nbre."&euro;</td> <td headers='suppr'><a href='panier-supprimer.php?id=".$rowpiece['id_p']."' alt='".$nom_piece."' onclick=\"Javascript:return confirm('Êtes-vous sûr de vouloir supprimer ".$rownom['piece'].")\"><img src='images/suppr.jpg' alt='".$rownom['piece']." width='18' height='18' /></a></td> </tr>"; // <td headers='ht'>".($rowpiece['prix'] - (($rowpiece['prix']*19.6)/100))*$nbre." &euro;</td> } } } if($trouver == 'oui'){ //-- Calcul des frais de port-- $euro = '€'; $pays = (isset($_POST['idpays']))? $_POST['idpays']: '67'; $r_pays = mysql_query("SELECT z.id_zone, p.pays, p.id_zone FROM casse_pays p, casse_zone z WHERE z.id_zone = p.id_zone AND p.id_pays='".$pays."'"); $l_pays = mysql_fetch_assoc($r_pays); $sql = "SELECT tarif, poids FROM casse_fraisport WHERE id_zone =".$l_pays['id_zone']; $rfrais = mysql_query($sql)or die("Erreur requete :".$sql); $poids1 = 0; while($lfrais = mysql_fetch_assoc($rfrais)){ if($poids > $poids1 && $poids <= $lfrais['poids']){ $fraisport = $fraisport + $lfrais['tarif']; } $poids1 = $lfrais['poids']; } //--Affichage des frais de port pour ce partenaire $check1 = "checked=\"checked\""; $check2 = ""; $input = 'rad'.$rowpart['id_part']; if($_POST[$input] == 2){ $check2 = "checked=\"checked\""; //-- Enregistrement de l'etat de livraison-- $FRAISPORT[$rowpart['id_part']] = 0; }else{ $check1 = "checked=\"checked\""; if($fraisport == 0){ $FRAISPORT[$rowpart['id_part']] = 9999; $fraisport = "Contacter l'annonceur"; $euro = ""; $special = 1; session_register('SPECIAL'); $SPECIAL[$rowpart['id_part']] = 1; }else{ //-- Ajout des frais de port au sous-total de ce partenaire-- $_SESSION[$amount] = $_SESSION[$amount] + $fraisport; //-- ENregistrement de l'etat de livraison-- $FRAISPORT[$rowpart['id_part']] = $fraisport; //-- Ajout des frais de port au total -- $total = $total + $fraisport; //-- Ajout au frais de port total -- $totalfraisport = $totalfraisport +$fraisport; } } $ligne .= "<tr><td>Se faire livrer</td><td>&nbsp;</td><td>&nbsp;</td><td>".$fraisport.$euro."</td><td><input type=\"radio\" onclick=\"submit(this.form)\" name=\"rad".$rowpart['id_part']."\" id=\"rad1".$rowpart['id_part']."\" value=\"1\" ".$check1." /></td> </tr>"; $ligne .= "<tr><td> ou Retirer sur place</td><td>&nbsp;</td><td>&nbsp;</td><td>Gratuit</td><td><input type=\"radio\" onclick=\"submit(this.form)\" name=\"rad".$rowpart['id_part']."\" id=\"rad2".$rowpart['id_part']."\" value=\"2\" ".$check2." /></td> </tr>"; } } }else{ echo "<tr><td colspan=\"6\">Votre panier est vide.</td></tr>"; $totalfraisport = 0; } ?> </tbody> </table>

Re: Temps de chargement d'une page anormalement long

Posté : 07 déc. 2010, 11:58
par Berzemus
Chronomètre la page à plusieurs points, ainsi tu auras une idée d'ou se situe l'anomalie, et tu pourrais y remédier de manière chirurgicale (plutôt que de deviner ou il peut se trouver).

Point à vérifier: que les requêtes utilisent bien toutes un index.

Re: Temps de chargement d'une page anormalement long

Posté : 07 déc. 2010, 12:15
par Estecado
Chronomètre la page à plusieurs points, ainsi tu auras une idée d'ou se situe l'anomalie, et tu pourrais y remédier de manière chirurgicale (plutôt que de deviner ou il peut se trouver).

Point à vérifier: que les requêtes utilisent bien toutes un index.
Ok, je vais commencer par ça. Merci.

Re: Temps de chargement d'une page anormalement long

Posté : 07 déc. 2010, 13:10
par Estecado
Problème résolu.

Merci de ton aide

Re: Temps de chargement d'une page anormalement long

Posté : 08 déc. 2010, 02:19
par devlop78
Quel était le problème ?