JeuWeb - Crée ton jeu par navigateur
Tests performances et optmisation code php - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Tests performances et optmisation code php (/showthread.php?tid=2130)

Pages : 1 2 3 4


RE: Tests performances et optmisation code php - Roworll - 12-12-2007

Une petite version objet (développement fait maison)
Code PHP :
<?php 
$db
= new bdd();
$db->addTable('joueur');
$db->addField('nom');
$db->addField('xp');
$db->addWhere('joueur_name',$nom);
$db->addWhere('truc',$truc);
$db->addWhere('machin',$machin);
$db->setLimit($start,$end);
echo
$db->getQuery(); // histoire de vérifier le code la la requête
$db->Execute();
Mais bon, là on rentre dans les cas particuliers.


RE: Tests performances et optmisation code php - X-ZoD - 12-12-2007

ca fai bocou de ligne et de caracteres non ? -_-


RE: Tests performances et optmisation code php - Lys91 - 12-12-2007

Sephi-Chan a écrit :
Lys91 a écrit :sprintf("SELECT nom, xp FROM joueur WHERE joueur_name = '%s' AND truc='%s' AND machin='%s' LIMIT %d, %d", $name, $truc, $machin, $start, $end);

$query='';
$query.='SELECT nom, xp FROM joueur ';
$query.='WHERE joueur_name =\''.$name.'\' ';
$query.='AND truc=\''.$truc.'\' ';
$query.='AND machin=\''.$machin.'\' ';
$query.='LIMIT '.$start.', '.$end;

Apres c'est une question de point de vue sur la lisibilite du code j'en convient et pour la concatenation avec quelques regles de bonne pratique ca pose peu de soucis.

Je ne pense pas posseder la verite mais une solution alternative tout a fait viable.

(clavier qwerty encore une fois dsl)

Encore une fois que je pense que ta solution n'apporte - objectivement - que du mauvais. Si tu penses qu'elle a un quelconque intérêt, n'hésite pas à expliquer pourquoi.

Voilà ce que peut donner une requête un poil plus complexe avec sprintf() :
Code PHP :
<?php 
sprintf
("
SELECT nom, xp
FROM joueur
WHERE joueur_name = '%s'
AND truc='%s'
AND machin='%s'
LIMIT %d, %d"
,
$name,
$truc,
$machin,
$start,
$end
);
Elle combine les avantages (lisibilité, possibilité de test internes, etc.) de toutes les techniques sans défauts. Que demande le peuple ?

Je note que tu parlais des tests internes (avec l'opérateur ternaire, je suppose), c'est clairement un ennemi de la lisibilité ! On peut les faire avec sprintf(), mais c'est à mon avis - dans la plupart des cas une bêtise : si on veut de la clarté (en utilisant sprintf()), ce n'est pas pour la ruiner à coup d'opérateurs ternaires.

L'utilisation de sprintf() peut paraître plus coûteuse en ressources, mais je pense que c'est en fait économique puisqu'il évite de recourir à des variables intermédiaires puisque l'on peut utiliser des fonctions directement dans les arguments.

Je précise quand même que je n'ai rien contre toi, je poste dans le seul but de fournir des clés pour un code plus propre et lisible aux lecteurs.



Sephi-Chan, qui songe à se faire une userbar "Sprintf() user"...


@ X-ZoD > Je suggère de mettre les liens sous forme de liste, de manière à avoir quelque chose de clair. Ces URLs mises les unes à la suite des autre c'est... assez rebutant.

Aucun soucis, debattre me pose pas de soucis.
On peut aussi appelle une fonction dans la methode "concatenation"

[....]
$query.='AND machin=\''.ma_function($machin).'\' ';
[....]

Ou j'ai pas compris de quoi tu parlais ^^.

Le truc de Row est interessant aussi mais la pour le coup on perd un peu en lisibilite (imo).


On derive du sujet je pense qu'un modo pourrait sinder les post.
Si d'autre personne utilise d'autre methode je serai interesse de les connaitre.

PS : quel variable intermediaire ?


RE: Tests performances et optmisation code php - Sephi-Chan - 12-12-2007

C'est vrai que la méthode que tu proposes (Roworll) est abusivement chargée. Je pense que l'objet c'est comme tout, il faut l'utiliser avec modération et dans le sens de nos besoins.

Lys91 a écrit :Aucun soucis, debattre me pose pas de soucis.
On peut aussi appelle une fonction dans la methode "concatenation"

[....]
$query.='AND machin=\''.ma_function($machin).'\' ';
[....]

Ou j'ai pas compris de quoi tu parlais ^^.

[...]

PS : quel variable intermediaire ?
Oui mais pourquoi faire une concaténation illisible alors que le sprintf() permet de faire la même chose proprement ? C'est ce que je veux comprendre, le sprinft() est clairement mieux - c'est objectif - alors pourquoi utiliser la concaténation ?

Pour reprendre le terme de Pascal, tous les caractères que tu utilises (le .=, les ', les \) ajoutent du bruit à ton script, ce qui en diminue la lisibilité. À combiner au fait que tu ne mets pas d'espaces blanc, ton script doit rapidement devenir illisible.
Citation :$query.='AND machin=\''.ma_function($machin).'\' ';

Les variables intermédiaires sont par exemples les variable de $_POST qui font l'objet d'une redéfinition, comme cela :
Code PHP :
<?php 
$message
= mysql_real_escape_string($_POST['message']);



Sephi-Chan


RE: Tests performances et optmisation code php - Lys91 - 12-12-2007

Les variable intermediaire sont les meme que pour la fonction sprintf, dans ce cas.

Avantage :
-pas d'appelle de fonction, donc plus leger
-c'est plus claire qu'un sprintf, je lis ma requete ligne par ligne je vois quelle variable j'y insere alors qu'avec sprintf je tombe sur un %s %d %f etc... je cherche la xieme variable et j'espere ne pas me planter sur le type.

Inconvenient :
-le bruit (question d'habitude)

Si on fait ca n'importe comment ca peut poser probleme c'est vrai par exemple ne pas oublier le $query=''; au depart pour eviter de concatener avec la requete precedente.


RE: Tests performances et optmisation code php - pascal - 12-12-2007

Lys91 a écrit :Le truc de Row est interessant aussi mais la pour le coup on perd un peu en lisibilite (imo).

( je continue dans le hs )
l'avantage de cette syntaxe objet se trouve dans les moteurs de recherche :
_ je fais une recherche multi critères
_ j'ajoute un nouveau champ à la db suite à une modif des besoins

=> je ne modifie pas la requête avec une expression de plus dans le WHERE, mais j'ajoute quelques lignes qui créent ce WHERE correctement ( _sous réserve que la classe db fonctionne correctement_ )

A+

Pascal


RE: Tests performances et optmisation code php - Sephi-Chan - 12-12-2007

Lys91 a écrit :Avantage :
-pas d'appelle de fonction, donc plus leger
-c'est plus claire qu'un sprintf, je lis ma requete ligne par ligne je vois quelle variable j'y insere alors qu'avec sprintf je tombe sur un %s %d %f etc... je cherche la xieme variable et j'espere ne pas me planter sur le type.
J'ai ri.


Sephi-Chan, * fatigué par ce combat, le jeune homme s'effondra, résigné à mourir, sacrifié sur l'autel de la mauvaise foi... *


RE: Tests performances et optmisation code php - Plume - 12-12-2007

Sephi, n'exagère pas Smile
Lys, réfléchis.
Pourquoi concaténer abusivement ? Je ne suis pas utilisateur de la `méthode' sprintf(). Mais je trouve ta méthode tout de même abusive.
Code PHP :
<?php 
$query
= '
SELECT nom, xp
FROM joueur
WHERE joueur_name = \''
. $name . '\'
AND truc = \''
. $truc . '\'
AND machin = \''
. $machin . '\'
LIMIT '
. $start . ', ' . $end
;

~L~


RE: Tests performances et optmisation code php - Sephi-Chan - 12-12-2007

LexLxUs a écrit :Sephi, n'exagère pas Smile
Lys, réfléchis.
Pourquoi concaténer abusivement ? Je ne suis pas utilisateur de la `méthode' sprintf(). Mais je trouve ta méthode tout de même abusive.
Code PHP :
<?php 
$query
= '
SELECT nom, xp
FROM joueur
WHERE joueur_name = \''
. $name . '\'
AND truc = \''
. $truc . '\'
AND machin = \''
. $machin . '\'
LIMIT '
. $start . ', ' . $end
;

~L~
Je profitais juste de l'occasion pour un peu de lyrisme... :'(

Hey tu ne respectes pas l'article que tu cites en signature ! Tu mets des espaces blancs autour des opérateurs de concaténation !
Guide de style pour bien coder a écrit :Merci de ne pas utiliser la virgule et d'éviter de mettre un espace après le point. Cela ne fait qu'augmenter la taille de la ligne et ce n'est vraiment pas indispensable pour la bonne compréhension du code.
M'enfin je te comprends, je trouve que c'est de la connerie cet article : ils s'imposent trop en référence sur les choix. C'est très prétentieux.


Sephi-Chan, sprintf() est une fonction, pas une méthode ! Confusediffle:


RE: Tests performances et optmisation code php - Lys91 - 12-12-2007

(HS : j'insiste autant car je suis au boulot et j'ai pas grand chose à faire, donc jespere que tu n'as pas mal pris cette discussion)

Bon j'ai enfin compris que ce qui te posais problème cétait la suite de concaténation.

En conclusion la "méthode LexLxUs" remporte mon adhésion :p.

Sinon sur l'ouverture de fichier: http://www.phplibrairies.com/tutorial_optimisation_fr.html

Pour ma part toujours utilisé le fopen.