Optimisation de code

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Optimisation de code

par airaam » 16 févr. 2008, 21:24

ah oui c'est les requetes croisées ?

par iclo » 13 févr. 2008, 00:22

me reste plus qu'à faire correspondre id_joueur avec le pseudo, mais ça c'est finger in ze nose :)
Juste au cas où, je ne sais pas si tu sais que tu peux faire une jointure entre tes tables, et récupérer directement le nom du joueur et le nombre de ses match ? Ce qui te permettra d'y parvenir sans ajouter une seule ligne de code.

par Hubert Roksor » 12 févr. 2008, 23:52

Scoop !
Oui, euh, mais en fait non (ça dépend de la taille des chaînes en question et du nombre de concaténations). Mais comme le disais zeus, c'est de nanosecondes dont on parle, utilise ce qui te parait le plus pratique, la différence ne peut même pas être mesurée en hébergement mutualisé.

Pour la postérité, la forme la plus performante doit être
<?php echo 'str', $var, 'str'; ?>
à égalité avec
str<?php echo $var; ?>str

par zeus » 12 févr. 2008, 20:15

Scoop !
Use double quotes to concat more than two strings instead of multiple '.' operators. PHP is forced to re-concatenate with every '.' operator.
>> Utilisez des guillemets pour concatener plus de 2 chaines à la place de multiple opérateur de concaténation. PHP est forcé de reconcatener à chaque "." rencontré.

Source : http://www.php.net/manual/fr/language.o ... string.php
Je n'ai plus les bench sous la main, mais il s'avère que le 'xxx'.$foo.'xxx' était plus performant que le "xxx$fooxxx".
Par contre, les données s'inversait avec "xxx".$foo."xxx" (normal).

Et je tiens à préciser que nous parlons de poullièmes de microsecondes ... ;)

par Genova » 12 févr. 2008, 19:55

Avant d'augmenter la lisibilité, les {} permettent d'être sur qu'on va bien parser une variable dans une string " ".

Par exemple dans certains cas c'est obligatoire :
$str = "Ma valeur en post : {$_POST['quelquechose']}";

par Sedril » 12 févr. 2008, 19:46

Les {} permettent d'augmenter la lisibilité, il se trouve que mon IDE est configuré pour les mettre en valeur automatiquement.

par airaam » 12 févr. 2008, 19:35

Le SQL permet quelques raccourcis :
<?php
$sql = "SELECT count(*) AS nb, id_joueur FROM participe GROUP BY id_joueur ORDER BY 1 DESC";
$result = mysql_query($sql, $connexion);
while($var = mysql_fetch_array($result)) {
  echo "{$var['nb']}...{$var['id_joueur']}<br/>";
}
?>
* AS nb permet de renommer un champ juste le temps de la requête
* Le ORDER BY peut prendre un numéro d'ordre de champ, ici 1 pour le champ nb
* Enfin, pourquoi faire 3 echo en PHP ?

Attention à la balise BR le slash se met aprés pour la notation xHTML.[/list]
ah ben niquel je savais pas pour le AS nb

pour les 3 echos c'etait juste le temps du test :) je fait comme toi d'habitude

par contre pourquoi mettre des {} entre les $var ?

pour le reste de votre discussion je ne vais pas intervenir, vous vous doutez pourquoi :)

par Sedril » 12 févr. 2008, 19:27

Scoop !
Use double quotes to concat more than two strings instead of multiple '.' operators. PHP is forced to re-concatenate with every '.' operator.
>> Utilisez des guillemets pour concatener plus de 2 chaines à la place de multiple opérateur de concaténation. PHP est forcé de reconcatener à chaque "." rencontré.

Source : http://www.php.net/manual/fr/language.o ... string.php

par Hubert Roksor » 12 févr. 2008, 19:10

PHP ne parse pas le contenu des chaines, donc du temps d'exécution en mois
Petite correction : c'est du temps de compilation en moins. Ça veut dire que si cette chaîne est dans une boucle "for" de 1000 itérations, le gain est de 1, pas 1000. Ça veut aussi dire que si vous utilisez un cache comme APC ou eAccelerator, il n'y a pas de différence entre les deux, puisque la compilation n'est effectuée qu'une fois pour toute la vie du script*

* ou en tout cas suffisamment rarement pour être négligible

par zeus » 12 févr. 2008, 18:37

en utilisant ' au lieu de ", PHP ne parse pas le contenu des chaines, donc du temps d'exécution en mois.

De plus, comme AB l'a souligné, c'est plus lisible ;)

par AB » 12 févr. 2008, 18:26

Pourquoi avantageusement Zeus ? Je suis sceptique !
echo $var['nb'].'...'.$var['id_joueur'].'<br/>';
En quoi la concaténation est plus avantageuse que la substitution par le moteur PHP ?

:?:

D'une part c'est plus lisible, d'autre part on peut supposer que le moteur aura moins de travail à faire.
Maintenant j'ai pas fait de bench non plus. Faudrait voir :)

par Sedril » 12 févr. 2008, 18:02

Pourquoi avantageusement Zeus ? Je suis sceptique !
echo $var['nb'].'...'.$var['id_joueur'].'<br/>';
En quoi la concaténation est plus avantageuse que la substitution par le moteur PHP ?

:?:

par zeus » 12 févr. 2008, 17:56

Juste pour approfondir, mais
echo "{$var['nb']}...{$var['id_joueur']}<br/>"; 
peut être avantageusement remplacé par
echo $var['nb'].'....'$var['id_joueur'].'<br/>';

par Sedril » 12 févr. 2008, 17:53

Le SQL permet quelques raccourcis :
<?php
$sql = "SELECT count(*) AS nb, id_joueur FROM participe GROUP BY id_joueur ORDER BY 1 DESC";
$result = mysql_query($sql, $connexion);
while($var = mysql_fetch_array($result)) {
  echo "{$var['nb']}...{$var['id_joueur']}<br/>";
}
?>
* AS nb permet de renommer un champ juste le temps de la requête
* Le ORDER BY peut prendre un numéro d'ordre de champ, ici 1 pour le champ nb
* Enfin, pourquoi faire 3 echo en PHP ?

Attention à la balise BR le slash se met aprés pour la notation xHTML.[/list]

par airaam » 12 févr. 2008, 16:21

je viens de voir ta requète, pffff comment c'est monstrueux de connaitre ces requètes optimisées !!

va falloir que j'arrète le bricolage php et que je m'y mette un peu plus sérieusement :)

bon en tout cas merci à vous j'ai fait un petit pas dans la logique php/mysql

je vais maintenant continuer à me documenter et développer tout seul les bonnes infos que vous m'avez tous donné ;)

de savoir qu'il y a toujours meilleur que soi, ça fout les boules, mais c'est tellement rassurant par moment :D

EDIT

et voilà grâce à vous mon super code qui prend plus que 8 lignes
$sql = "SELECT count( * ) , id_joueur FROM participe GROUP BY id_joueur ORDER BY `count( * )` DESC";
$result = mysql_query ($sql, $connexion);
while($var = mysql_fetch_array($result))
{
 echo $var['count( * )'];
 echo $var['id_joueur']; 
 echo "</br>";  
 }
me reste plus qu'à faire correspondre id_joueur avec le pseudo, mais ça c'est finger in ze nose :)

questions qui n'ont rien à voir ou presque, vous êtes arrivés à ce niveau comment ? écoles ? bouquins? sites comme php france ?

parce que j'aimerai vraiment avoir de meilleures bases et avoir un bon support, acheter un bouquin sur le php c'est con? y'en a des meilleurs que d'autres ?