Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1056 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Optimisation dans une boucle ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation dans une boucle ...

n°1146984
Max Evans
Posté le 11-07-2005 à 19:55:51  profilanswer
 

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
mood
Publicité
Posté le 11-07-2005 à 19:55:51  profilanswer
 

n°1146986
FlorentG
Unité de Masse
Posté le 11-07-2005 à 19:57:45  profilanswer
 

rien compris :(

n°1146994
Max Evans
Posté le 11-07-2005 à 20:03:20  profilanswer
 

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
n°1147012
bl@p_psx
Admin G15-france
Posté le 11-07-2005 à 20:13:15  profilanswer
 

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


---------------
:Moultiplayers:.:Quatuor Chevalier:.:Admin G15-france.com:.:Wiki -G15-france:.:-Papa-:.
n°1147022
Max Evans
Posté le 11-07-2005 à 20:20:31  profilanswer
 

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
n°1147024
esox_ch
Posté le 11-07-2005 à 20:22:02  profilanswer
 

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
n°1147032
Max Evans
Posté le 11-07-2005 à 20:25:26  profilanswer
 

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
n°1147033
sielfried
Posté le 11-07-2005 à 20:26:37  profilanswer
 

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.

n°1147035
Max Evans
Posté le 11-07-2005 à 20:29:52  profilanswer
 

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
n°1147053
Max Evans
Posté le 11-07-2005 à 20:40:46  profilanswer
 

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
mood
Publicité
Posté le 11-07-2005 à 20:40:46  profilanswer
 

n°1147065
esox_ch
Posté le 11-07-2005 à 20:47:47  profilanswer
 

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
n°1147077
Max Evans
Posté le 11-07-2005 à 20:55:04  profilanswer
 

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
n°1147232
bl@p_psx
Admin G15-france
Posté le 11-07-2005 à 22:41:16  profilanswer
 

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-:.
n°1147371
snarky
Posté le 12-07-2005 à 01:26:43  profilanswer
 

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:

n°1147382
esox_ch
Posté le 12-07-2005 à 07:12:45  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Optimisation dans une boucle ...

 

Sujets relatifs
probleme de boucleVB Excel - Utiliser une variable pour conditionner une boucle
pb avec une boucle...pb boucle do while
Boucle tant que....optimisation code CSS pour IE
pb de if dans une boucle[JSP/Javascript] Pb d'incrémentation dans une boucle
Probleme de boucle et base de donnees[ASM] Optimisation MMX/SSE d'une boucle
Plus de sujets relatifs à : Optimisation dans une boucle ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR