Aider moi à optimiser ma fonction Listbox

Aider moi à optimiser ma fonction Listbox - PHP - Programmation

Marsh Posté le 22-02-2005 à 10:23:10    

Code :
  1. function ListBox(&$valeurs,$index,$nom)
  2. {
  3. $res="\n\t<select name=\"$nom\">";
  4. foreach( $valeurs as $key => $valeur)
  5. {
  6.  $select = ($key==$index) ? ' selected=selected' : '';
  7.  $res.="\n\t\t<option value=\"".$key."\"".$select.">$valeur</option>";
  8. }
  9. $res.="\n\t</select>\n\t";
  10. return $res;
  11. }
  12. function SelectDB($db, $index=0)
  13. {
  14.  $sql='SELECT column1, column2 FROM table order column1';
  15.  $res=mysql_query($sql,$db);
  16.  while($myrow=mysql_fetch_array($res))
  17.  {
  18.   $tab[$myrow[0]]=$myrow[1];
  19.  }
  20.  return ListBox($tab,$index,'listbox');
  21. }


 
Salut,
 
je n'arrive pas à optimiser ce code, dès l'instant où j'ai appel à deux trois fonctions appelant ListBox, ma page passe à 4sec de génération.  
 
:/

Reply

Marsh Posté le 22-02-2005 à 10:23:10   

Reply

Marsh Posté le 22-02-2005 à 10:32:01    

je pense que c'est plus un appel répété de requete SQL que de ta fonction PHP qui allourdi le temps de génération...
 
Juste comme ça, c'est pas plutot "oder by" que "order" dans ton select ???


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 22-02-2005 à 10:35:00    

C'est bien order by. ;)
 
Je sais pas mais quand je produis du html on the rock, sans passer par ma fonction ça va plus vite, or y a autant de requêtes SQL.
 
:/
 

Reply

Marsh Posté le 22-02-2005 à 10:40:20    

Bon j'ai fait un essai.
ça

Code :
  1. <?php
  2. include('haut.php');
  3. $t=SelectDB($db, $index=0);
  4. $t=SelectDB($db, $index=0);
  5. $t=SelectDB($db, $index=0);
  6. $t=SelectDB($db, $index=0);
  7. include('bas.php');


ça donne 0.07secondes
 
alors que ça

Code :
  1. <?php
  2. include('haut.php');
  3. echo SelectDB($db, $index=0);
  4. echo SelectDB($db, $index=0);
  5. echo SelectDB($db, $index=0);
  6. echo SelectDB($db, $index=0);
  7. include('bas.php');


ça donne 3.69sec, donc c'est pas ma fonction qui alourdit? mais l'affichage?
Merci.

Reply

Marsh Posté le 22-02-2005 à 10:45:19    

tiens, c'est bizarre...
tes calcul de temps sont fait avec un ecart de timestamps dans ton script ?


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 22-02-2005 à 10:49:35    

mais je pense quand meme que c'est dut à la requete, dans un cas le cache de MySQL doit fonctionner et pas dans l'autre...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 22-02-2005 à 11:01:08    

Dans haut.php :
$tps_start = get_microtime();
 
 
Dans bas.php:
$tps_end = get_microtime();
$tps = $tps_end - $tps_start;
$tps2=@rounder($tps);

Reply

Marsh Posté le 22-02-2005 à 11:15:42    

ça donne quoi si tu compare le temps de:

Code :
  1. <?php
  2. include('haut.php');
  3. echo SelectDB($db, $index=0);
  4. echo SelectDB($db, $index=0);
  5. echo SelectDB($db, $index=0);
  6. echo SelectDB($db, $index=0);
  7. include('bas.php');
  8. ?>


 
avec celui de:

Code :
  1. <?php
  2. include('haut.php');
  3. $t= SelectDB($db, $index=0);
  4. echo $t;
  5. echo $t;
  6. echo $t;
  7. echo $t;
  8. include('bas.php');
  9. ?>


 
pour voir si c'est "l'affichage" a proprement parler (le echo) ou le fait que tu appel ta fonction dans le echo plutot que de stocker les valeurs...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 22-02-2005 à 11:17:57    

Salut
 
T'as beaucoup de valeurs dans tes listes ?

Reply

Marsh Posté le 22-02-2005 à 13:39:57    

effectivement, sur une des LB j'ai 802 enregistrement.
Si je fais un essai sans celle-ci ça reste à 0.07sec.

Reply

Marsh Posté le 22-02-2005 à 13:39:57   

Reply

Marsh Posté le 22-02-2005 à 13:46:05    

Pour Xav_ :
Le premier cas : 4 executions successives  : temps entre 4.74 et 5.88.
 
Deuxième cas : 4 execution : sensiblement les mêmes temps.

Reply

Marsh Posté le 22-02-2005 à 13:57:58    

[quote=989764,0,10,1085]effectivement, sur une des LB j'ai 802 enregistrement.
Si je fais un essai sans celle-ci ça reste à 0.07sec.[/quote]
 
ha ben oui, du coup...


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Marsh Posté le 22-02-2005 à 14:12:13    

C'est le code HTML généré qui est trop gros :)
 
Essaie avec ça en première instruction  :

Code :
  1. ob_start('ob_gzhandler');

Reply

Sujets relatifs:

Leave a Replay

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