Optimisation dans une boucle ...

Optimisation dans une boucle ... - PHP - Programmation

Marsh Posté le 11-07-2005 à 19:55:51    

Bonsoir à tous :hello:,
 
J'aurai une petite question à propos d'une boucle.
Pour commencer, je fais ma requête SQL (Qui me ressortira plus tard 10 enregistrements).
 
Je fais ma boucle, et je fais mon test dedans :
 
while ( $tableau = mysql_fetch_array($requete) )
{
  if ( 1 == 1 ) {
  echo $tableau['champ']; }
}
 
Comme vous l'aurez compris, le résultat de mon test (1 == 1) est toujours vrai. Or, je suis obligé d'éxecuter 10 fois ce test (car 10 enregistrements dans ma boucle), ce qui représente à mes yeux une belle abération. A savoir que ma variable $tableau['champ'] est une variable dynamique, propre à chaque enregistrement, donc ce n'est jamais la même :)
 
Vous auriez une astuce d'optimisation ? :)
 
 
Merci à tous :jap: ;)


Message édité par Max Evans le 11-07-2005 à 19:57:10

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

Marsh Posté le 11-07-2005 à 19:55:51   

Reply

Marsh Posté le 11-07-2005 à 19:57:45    

rien compris :(

Reply

Marsh Posté le 11-07-2005 à 20:03:20    

Merde, j'ai été aussi mauvais que ça ? :d
 
J'ai ma portion de code PHP :
while ( $tableau = mysql_fetch_array($requete) )  
{  
  if ( 1 == 1 ) {  
  echo $tableau['champ']; }  
}  
 
Tu es d'accord que mon test if (1==1) est toujours vrai ? En réalité, j'aurai dû vous mettre :
 
if ( $variable_numerique == 1) { ... }
 
 
Cette variable est fixée dès le début du script, mettons : $variable_numerique = 1;
 
Donc mon test if ( $variable_numerique == 1) équivaut à if ( 1 == 1), tu suis ? ;)
 
Or, dans ma boucle, je fais le test à chaque fois, pour ensuite afficher une autre variable (Qui n'est pas fixée celle là). Or ce test est toujours vrai, puisque $variable_numerique est toujours égal à 1.
 
Donc je trouve ça aberrant d'éxecuter 10 fois le même test (Qui sera 10 fois bon). J'aimerai donc l'éxecuter une seule fois (A priori, hors de la boucle).
 
J'espère avoir été clair ce coup-ci ;) :D


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

Marsh Posté le 11-07-2005 à 20:13:15    

pourquoi tu test si $variable_numerique est toujours égal à 1. ????


---------------
:Moultiplayers:.:Quatuor Chevalier:.:Admin G15-france.com:.:Wiki -G15-france:.:-Papa-:.
Reply

Marsh Posté le 11-07-2005 à 20:20:31    

Parce que j'en ai besoin :D
 
En réalité (Oui, je ne mets jamais mon vrai code :D, mais bon, cette fois j'y suis obligé :D).
 
Au début j'ai :
$level_admin = get_level_admin($user);
 
La fonction get_level_admin() récupère en fait le level de l'administrateur (2=admin, 3=super-admin).
 
Donc en fait, j'ai :
while ( $tableau = mysql_fetch_array($requete) )  
{  
 
  echo 'Citer ce Message';
 
  if ( $level_admin == 2 || $level_admin == 3 )
  {  
  echo '<a href="erase.php?message='.$tableau['id'].'">Effacer ce Message'</a>;
  }
 
}  
 
Si le user a un niveau d'administration de 2 ou 3, on affiche le lien pour effacer le message. Sinon, il n'est pas affiché. Et l'on peut aussi voir que la variable $level_admin ne change pas dans la boucle, donc je fais 10 fois le même test, pour rien ... :)


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

Marsh Posté le 11-07-2005 à 20:22:02    

Je vois ton probleme Max (meme si désolé de le dire mais il faut s'accrocher pour comprendre :D), et désolé mais toutes les solutions (while,for,...) arrivent au meme point a ce niveau la ... Parcontre ce genre de "baise de perf" est de l'ordre du nanoseconde (sinon moins) donc honnetement je crois pas que ce soit tragic ...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 11-07-2005 à 20:25:26    

esox_ch a écrit :

Je vois ton probleme Max (meme si désolé de le dire mais il faut s'accrocher pour comprendre :D), et désolé mais toutes les solutions (while,for,...) arrivent au meme point a ce niveau la ... Parcontre ce genre de "baise de perf" est de l'ordre du nanoseconde (sinon moins) donc honnetement je crois pas que ce soit tragic ...


Effectivement, j'avais peur pour les temps d'éxecution, car cette page est chargée très très souvent ;)
 
Ceci étant, c'est fort probable qu'une multitude de if() sur une variable qui ne change pas n'est pas dramatique pour le serveur qui supporte le script ;)
 
Bon ben, j'aurai quand même essayé, merci beaucoup à tous ;) :jap:


Message édité par Max Evans le 11-07-2005 à 20:25:47

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

Marsh Posté le 11-07-2005 à 20:26:37    

Ben tu mets la boucle dans le if au lieu de l'inverse, si vraiment tu veux optimiser. Mais si y'a plusieurs conditions et/ou un contenu conséquent dans ta boucle ça va être dégueu.
 
Sinon faut faire les tests avant et jouer avec eval(), mais je sais pas si t'y gagnes.

Reply

Marsh Posté le 11-07-2005 à 20:29:52    

sielfried a écrit :

Ben tu mets la boucle dans le if au lieu de l'inverse, si vraiment tu veux optimiser. Mais si y'a plusieurs conditions et/ou un contenu conséquent dans ta boucle ça va être dégueu.
 
Sinon faut faire les tests avant et jouer avec eval(), mais je sais pas si t'y gagnes.


Effectivement, il y a un gros contenu, et tout n'est pas dynamique, donc je dupliquerai du code pour rien ;)
 
Je suis en train de regarder les temps de génération avec avec 1000 tests if ( 1 == 1 ), je vous donne les résultats dans un instant ;)


Message édité par Max Evans le 11-07-2005 à 20:30:17

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

Marsh Posté le 11-07-2005 à 20:40:46    

Donc, voici les résultats du test :)
 
J'ai écris 1000 fois dans un fichier le test suivant :
if ( 1 == 1 ) { $var = 23;  }
 
Le temps de génération de page donne :
0.000716924667358 seconde ...
 
Je n'aurais pas dû me tracasser :D


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

Marsh Posté le 11-07-2005 à 20:40:46   

Reply

Marsh Posté le 11-07-2005 à 20:47:47    

Désolé de te le dire mais je crois que vu ton niveau tu auras des trucs bien plus importants a optimiser que la structure d'un if :D ( par exemple en remplaçant le 1==1 par un TRUE) :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 11-07-2005 à 20:55:04    

esox_ch a écrit :

Désolé de te le dire mais je crois que vu ton niveau tu auras des trucs bien plus importants a optimiser que la structure d'un if :D ( par exemple en remplaçant le 1==1 par un TRUE) :D


 :heink: Je sais très bien de quoi on parle ... C'était uniquement pour cet exemple que j'ai transposé selon le 1 == 1 :)


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

Marsh Posté le 11-07-2005 à 22:41:16    

en mettant:
 if ( $level_admin > 1 ) ...
 
c'est dejà ca de gagner ... mais bon, comme tout les autres le disent, c'est pas vraiment le plus important d'an l'optimisation ^^ ( pense plutot à fermer la connexion MySQL ^^ )
 
@+


---------------
:Moultiplayers:.:Quatuor Chevalier:.:Admin G15-france.com:.:Wiki -G15-france:.:-Papa-:.
Reply

Marsh Posté le 12-07-2005 à 01:26:43    

bl@p_psx a écrit :

en mettant:
 if ( $level_admin > 1 ) ...
 
c'est dejà ca de gagner ... mais bon, comme tout les autres le disent, c'est pas vraiment le plus important d'an l'optimisation ^^ ( pense plutot à fermer la connexion MySQL ^^ )
 
@+


 
dans un de mes post on ma dit que le script fermé la connection a la fin de son execution
on m'aurait menti  :sarcastic:

Reply

Marsh Posté le 12-07-2005 à 07:12:45    

C'est teoriquement le cas (apres en pratique ... Qqn se devoue pr compter les threads? :D)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

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