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


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

je suis en train de faire des recherche sur tout ce qui est test de performance et comparaisons de fonctions (plutot utiliser telle fonction plutot qu'une autre) avec chiffres ou explications à l'appuie.

cela pourai me servir a moi comme a certains d'entre vous ... on en fera par la suite un recapitulatif quelque part sur jeu php (une fois approuvé par le reste de l'equipe)

je commence donc (avec edit au fur et a mesure que vous proposez des liens)
Citation :http://www.vulgarisation-informatique.com/optimiser-php.php
http://prendreuncafe.com/blog/post/2006/11/22/12-astuces-optimisation-performances-php
http://www.estvideo.net/dew/index/page/phpbench
http://www.estvideo.net/dew/index/php-mysql/2006/02
http://www.quesaco.org/Comparatif-strtr-str-replace-ereg



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

Comme d'habitude, je serais tenté de dire attention. La performance ne fait pas toujours bon ménage avec la lisibilité. Optimiser son code est important, c'est sûr, mais le gain est infime si l'algorithmique elle-même n'est pas optimisée.

Maintenant que c'est dit, passons aux liens :

Sephi-Chan


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

petite erreur :
$mavariable = 'bonjour tout le monde';
echo 'Valeur de la variable : $mavariable';

va afficher Valeur de la variable : $mavariable

il faut faire comme cesi :
$mavariable = 'bonjour tout le monde';
echo 'Valeur de la variable : '.$mavariable;

(ce qui est fait juste apres).

En générale éviter "mon_texte" qui demande au serveur d'examiner la chaîne de caractère transmise pour remplacer variable et caractère spéciaux au contraire de 'mon_text' ou aucun contrôle ne sera fait, php affiche directement ce qui est compris entre ' '.

Donc " " à proscrire que ce soit pour un echo ou pour une requete SQL !

Et comme on parle d'optim je regardai justement ça hier :
http://www.quesaco.org/Comparatif-strtr-str-replace-ereg


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

Lys91 a écrit :Donc " " à proscrire que ce soit pour un echo ou pour une requete SQL !

archi faux pour le SQL :
si tu utilises ' à la place de " dans les requetes SQL, tu vas introduire des caractères d'échappement qui vont pourrir ta lisibilité.

chaque modification sera un calvaire et le débuggage un enfer.

cf le tutorial Bonnes pratiques SQL

on ne doit pas sacrifier de la lisibilité pour quelques millièmes de secondes.

A+

Pascal


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

En quoi
$query = "SELECT nom, xp FROM joueur WHERE joueur_name = '$_POST['joueur_name']'"
est il plus lisible que :
$query='';
$query.='SELECT nom, xp FROM joueur ';
$query.='WHERE joueur_name =\''.$_POST['joueur_name'].'\'';

Qui permet de plus de rajouter facilement des conditions.


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

d'abord je n'utilise pas cette syntaxe, mais sprintf, qui ajoute encore de la lisibilité;

les échappements avec \ sont simples sur cette exemple, mais sur une requête plus complexe, ça devient chaud.

j'ai comme exemple concret les questions de debuggage de SQL sur ce forum depuis plus d'un an :
_ des personnes n'utilisent pas d'éditeur visuel, et ne voient pas les erreurs de concaténation
_ chaque concaténation / échappement ajoute du bruit au code source et le complexifie, et c'est source d'erreur

l'idée derrière tout ça c'est que la simplicité d'écriture permet une meilleure lecture du code, donc on évite de se créer des problèmes, et on se concentre sur des questions avec plus de valeur ajoutée que le débuggage d'une concaténation.

A+

Pascal


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

Lys91 a écrit :En quoi
$query = "SELECT nom, xp FROM joueur WHERE joueur_name = '$_POST['joueur_name']'"
est il plus lisible que :
$query='';
$query.='SELECT nom, xp FROM joueur ';
$query.='WHERE joueur_name =\''.$_POST['joueur_name'].'\'';

Qui permet de plus de rajouter facilement des conditions.
Je me fais du soucis pour toi si tu trouves que le second bloc est aussi lisible que le premier.
La première ligne que tu montres est effectivement plus lisible, puisque justement elle tient sur une ligne, et parce qu'il n'est pas bondé de caractères d'échappement.

Voilà ce que je pense être le meilleur :
Code PHP :
<?php 
$query
= sprintf("SELECT nom, email FROM joueur WHERE nom = '%s' AND validation = %d;", mysql_real_escape_string($_POST['nom']), 1);
$query = mysql_query($query);
  • Très propre et lisible ;
  • Pas d'échappements ;
  • On peut utiliser des fonctions en live (et du transtypage) ;
  • On peut afficher la requête en interposant un echo $query entre le sprintf() et le mysql_query, ce qui permet de tester/déboguer dans phpMyAdmin, par exemple.


Sephi-Chan


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

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)


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

sprintf n'est pas plus contraignant niveau ressources ? ca reste tout de meme une fonction que l'on apelle
du coup je me retrouve a me demander ce qui est mieux entre concatener une chaine et utiliser une fonction sprintf

apres poru ce qui est de la visibilité ca reste une question d'habitude ou pas selon moi

pour etres sure que nous ne nous eloignons pas du sujet je met a jour le post initial avec les liens donnés au fur et a mesure

merci


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

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.