[PHP] Temps d'execution de requetes excessif :(

Temps d'execution de requetes excessif :( [PHP] - PHP - Programmation

Marsh Posté le 04-06-2002 à 13:50:03    

Hello a tous :hello:
 
Je viens de faire un script de Livre d'Or, je me suis aidé de celui de PHPDébutant :)
 
Or, g comme un gros soucis :(
Les requetes mettent entre 5 et 10s pour s'executer !!!  :ouch:  
 
Je vois vraiment pas d'ou vient le pb :(
 
Voila le code, certes il n'est pas parfait, mais bon, de la a mettre 10s pour interpreter tout ca, ca m'etonne :(
 
<?
function getmicrotime(){  
  list($usec, $sec) = explode(" ",microtime());  
  return ((float)$usec + (float)$sec);  
}  
$time_start = getmicrotime();
?>
<?
require_once('../include/config.inc.php
9;);
require_once('../include/fonctions.php'
;
;);
if (connect($host,$user,$pass,$db)) {
 
$nb = 10;
 
if(empty($page)) $page = 1;
if(empty($total)){ // nombre total de résultats
 $sql = "select count(*) as qte from guestbook_data WHERE idparent='$id'";
 $req = @mysql_query($sql);
 $total = @mysql_result($req,"0","qte" );
}
$debut = ($page - 1) * $nb;
 
 
    // Requete ordonnant les messages par dates  
      $query = "SELECT date,pseudo,email,message FROM guestbook_data WHERE idparent='$id' ORDER BY id DESC LIMIT $debut,$nb";  
       
       // Execute la requete precedente  
      $result = mysql_query($query) or die('Erreur SQL : '.mysql_error());      
       
     
$sql = "SELECT * FROM guestbook WHERE idmembre='$id'";  
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());  
 
$data = mysql_fetch_array($req);
 
     
      ?>
 
<html>
<head>
<title>GuestBook</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<style>
  a:hover {  color: <? echo "$data[couleur_lien]"; ?>; text-decoration: none}
  a {  color: <? echo "$data[couleur_texte_message]"; ?>; text-decoration: none}
</style>
 
 
 
<body bgcolor="<? echo "$data[couleur_fond]"; ?>">
  <table width="100%" height="100%" ><tr>
    <td>  
      <p align="center"><font face=Verdana size="2">Notre  
        site - <a href="javascript:void(0)" onClick="window.open('formulaire.php?id=<? echo "$id"; ?>',null,'width=400,height=300, status=no, directories=no, toolbar=no, location=no, menubar=no, scrollbars=no, resizable=no';);">Laisser un Message</a> - Contacts</font>  
      </p>
      <p> </p>
     
         
      <?php  
      // Définit la boucle : tant qu'il y a des messages dans la BDD  
     while ($val = mysql_fetch_array($result)) {    ?>
      <table width="75%" border="1" bordercolor="<? echo "$data[border_color]"; ?>" bordercolordark="<? echo "$data[couleur_fond]"; ?>" align="center" cellspacing="0" cellpadding="3">
        <tr>  
          <td width="28%" bgcolor="<? echo "$data[couleur_cellule_1]"; ?>">  
            <p><font color="<? echo "$data[couleur_texte_haut]"; ?>" face="<? echo "$data[police]"; ?>" size="<? echo "$data[police_size]"; ?>">Posté  
              par <b>  
              <? echo "$val[pseudo]"; ?>
              </b> le  
              <? echo "$val[date]"; ?>
              </font>  
              <? $texte = nl2br(htmlentities("$val[message]" )); ?>
              <a href="mailto:<? echo "$val[email]"; ?>"><img src="images/mail.gif" border="0" alt="Envoyer un Mail" align="absmiddle"></a>  
              <img src="images/site.gif" width="16" height="16" align="absmiddle">  
            </p>
          </td>
        </tr>
        <tr>  
          <td colspan="2"><font color="<? echo "$data[couleur_texte_message]"; ?>" face="<? echo "$data[police]"; ?>" size="<? echo "$data[police_size]"; ?>">  
            <? echo "$texte"; ?>
            </font></td>
        </tr>
      </table>
      <br>
      <? }    
 
    ?>  
     
 
   </td></tr></table>
   <br>
 
<center><font color="<? echo "$data[couleur_texte_message]"; ?>" face="<? echo "$data[police]"; ?>" size="1"><?
$nbpages = ceil($total / $nb); // arrondi a l'entier superieur
 // on affiche les pages
 for($i = 1;$i <= $nbpages;$i ++){
  echo "<a href=\"index.php?id=$id&page=$i&total=$total\">[$i]</a>";
  if($i < $nbpages) echo " - ";
 }}
   mysql_close();       ?></font><br>
  <?    
$time_end = getmicrotime();  
$time = round($time_end - $time_start, 3);  
echo "<br><font color=\"$data[couleur_texte_message]\" face=\"$data[police]\" size=\"1\"> Page générée en $time secondes</font>";  
?></center>
</body>
</html>

 
Merchi de votre aide :jap:


Message édité par Max Evans le 06-04-2002 à 17:10:34

---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 04-06-2002 à 13:50:03   

Reply

Marsh Posté le 04-06-2002 à 14:39:30    

Reply

Marsh Posté le 04-06-2002 à 16:04:05    

Reply

Marsh Posté le 04-06-2002 à 16:25:21    

tu es sur quel hébergeur ? si c'est un gratos c'est sûrement normal ...

Reply

Marsh Posté le 04-06-2002 à 16:52:07    

Ben non, pour ce script, je suis en local :)
Chez moi, ca indique en gros 0.03s, ce ki est tres raisonable :)
 
Mais kand d'autres personnes viennent voir la page qui est sur mon PC, elles tapent ds les 5s :(
 
C pas normal, car la vitesse d'execution de requete devrait etre la meme chez eux et chez moi, par contre, l'affichage 'pur' de la page (Graphisme,etc) est plus long chez eux, mais la c normal, je fais que du 16 Ko/s :)
 
Sinon, je suis sur une piste :)
 
Quand je laisse plusieurs petits messages ds le livre, ca passe normalement, l'execution pour les voir est tres rapide :)
Par contre, si je mets un gros message, du type celui que je tape en ce moment, c la que le temps de génération de la page est purement hallucinant = 5-10s :(
 
Donc, je pense que c un pb pour extraire le texte de la base non ? :)
 
En tout cas, merci de ton aide ;) :jap:


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 04-06-2002 à 17:00:40    

bon, plusieurs pistes :
 
* vérifie que tu as bien une clé dans ta table.  si tu n'en as pas une requête comme "SELECT date,pseudo,email,message FROM guestbook_data WHERE idparent='$id' ..." va parcourir toute la table pour trouver l'idparent. là, il faut un index sur l'id parent.
 
* ce genre de trucs echo "$data[border_color]"; c'est mal, echo $data[...] (bref, sans les quotes) suffit.
 
* essaye sans faire la transformations : nl2br(htmlentities("$val[message]" )); , en affichant le texte brut. je préfère sauvegarder le texte transformé dans la db plutôt que de le transformer à l'affichage.
 
* ça dépend aussi de ton ordi, j'ai eu des pages php qui s'affichaient assez lentement chez moi (p2 350) et instantanément sur l'hébergeur.

Reply

Marsh Posté le 04-06-2002 à 17:05:43    

Donc, pour reprendre :
 

  • IDPARENT est bien indexé :)
  • Je viens a l'instant d'enlever tous les ", apparement, c la meme chose, ca rame autant :(
  • Pour le nl2br, etc, j'ai aussi testé sans, ca fais encore pareil :(
  • Pour le PC, c un Ahtlon 1.4 Ghz avec 512 Mo, et un DD 60 Go a 7200 t/min, je pense pas trop que le pb vienne de la, g des scripts qui marchent parfaitement :)


Voili voilou, encore merchi ;) :jap:


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 04-06-2002 à 17:09:29    

je suis à court d'idées ... apparemment ça à plus à faire avec mysql que php. essaye de changer le titre de ton topic pour être plus explicite.

Reply

Marsh Posté le 04-06-2002 à 17:10:07    

:)
Pour le titre, faut que je reflechisse la :D


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 04-06-2002 à 17:22:32    

Max Evans a écrit a écrit :

:)
Pour le titre, faut que je reflechisse la :D  




 
tu mets des getmicrotime() - $starttime toutes les lignes pour voir exactement où ça rame.
ensuite si ça vient bien d'une requete.
tu fais un EXPLAIN de la requete pour en savoir un peu plus

Reply

Marsh Posté le 04-06-2002 à 17:22:32   

Reply

Marsh Posté le 04-06-2002 à 17:23:43    

siewn a écrit a écrit :

 
 
tu mets des getmicrotime() - $starttime toutes les lignes pour voir exactement où ça rame.
ensuite si ça vient bien d'une requete.
tu fais un EXPLAIN de la requete pour en savoir un peu plus  




 
Ouep, tient c pas bete, je v tester ca :)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 04-06-2002 à 17:26:50    

Max Evans a écrit a écrit :

 
 
Ouep, tient c pas bete, je v tester ca :)  




 
Arf, ben chez moi, ca tourne tout le temps autour de 0.015s :(
Je peux pas vraiment voir ou ca foire :(
 
Sinon, c koi le coup du explain ? :)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 04-06-2002 à 17:29:54    

Max Evans a écrit a écrit :

Arf, ben chez moi, ca tourne tout le temps autour de 0.015s :(


passe par un proxy : http://directory.google.com/Top/Co [...] Free/?tc=1
 
et rentres-y ton ip + le chemin de ton code.

Reply

Marsh Posté le 04-06-2002 à 17:30:04    

Reply

Marsh Posté le 04-06-2002 à 17:46:01    

pour explain, ca a l'air d'etre sous Linux non ?
Je suis sous Windows, et je vois po trop comment faire :(
 
youdontcare >> Merchi pour le proxy, je teste :)


---------------
Envie d'un bol d'air ? Traxxas Revo 3.3
Reply

Marsh Posté le 04-06-2002 à 18:09:24    

à tout hasard : tes champs sont de quel type ?
regarde l'article posté par siewn

Reply

Marsh Posté le 04-06-2002 à 18:11:09    

youdontcare a écrit a écrit :

 
* essaye sans faire la transformations : nl2br(htmlentities("$val[message]" )); , en affichant le texte brut. je préfère sauvegarder le texte transformé dans la db plutôt que de le transformer à l'affichage.




juste par curiosité, comment tu fais, apres pour éditer le msg ? (si dans ton forum tu as la possibilité d'editer les posts comme sur hfr?)

Reply

Marsh Posté le 04-06-2002 à 18:18:40    

greg@freestarthu a écrit a écrit :

juste par curiosité, comment tu fais, apres pour éditer le msg ? (si dans ton forum tu as la possibilité d'editer les posts comme sur hfr?)


je fais la transformation inverse ...

Reply

Marsh Posté le 04-06-2002 à 18:22:37    

youdontcare a écrit a écrit :

je fais la transformation inverse ...  




et donc si ton user avait ecrit explicitement <br> dans son post, quand il l'edite il a un saut de ligne à la place
remarque, on s'en fout ;-)

Reply

Marsh Posté le 04-06-2002 à 18:29:19    

non, le message passe par htmlentites() avant que son poste soit affiché. donc c'est converti en < et ça ne devient pas un saut à la ligne lors de la conversion inverse.

Reply

Marsh Posté le 04-06-2002 à 18:39:11    

youdontcare a écrit a écrit :

non, le message passe par htmlentites() avant que son poste soit affiché. donc c'est converti en < et ça ne devient pas un saut à la ligne lors de la conversion inverse.  



mais un <:br> :-)

Reply

Marsh Posté le 04-06-2002 à 18:42:19    

greg@freestarthu a écrit a écrit :

mais un <:br> :-)


:D <br> -> &lt;br&gt; .
 
tu ne trouveras pas de texte x qui, subissant une transformation f pour l'affichage, n'arrive pas à obéir à f-1(f(x)) == x.

Reply

Marsh Posté le 04-06-2002 à 18:45:13    

youdontcare a écrit a écrit :

:D <br> -> &lt;br&gt; .
 
tu ne trouveras pas de texte x qui, subissant une transformation f pour l'affichage, n'arrive pas à obéir à f-1(f(x)) == x.  




euh
mais donc tu passes par htmlentities dans l'autre sens quand il edite son msg... mais s'il a mis < en postant...? :-))

Reply

Marsh Posté le 04-06-2002 à 18:48:24    

oups, je confondais avec htmlspecialchars(). mais je ne comprends ni ta dernière question ni où tu veux en venir.

Reply

Marsh Posté le 04-06-2002 à 18:51:51    

youdontcare a écrit a écrit :

oups, je confondais avec htmlspecialchars().




Citation :


mais je ne comprends ni ta dernière question


-->si tu transforme les <br> de ton user en <br>, tres bien. mais qu'arrive t'il s'il poste son msg en tapant <.. euh ouais ok ct une question con, j'ai capté.... fatigué :/

Citation :


ni où tu veux en venir.  


--> nulle part...

Reply

Marsh Posté le 04-06-2002 à 18:55:05    

:)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed