Optimisation code

Gaara37
Invité n'ayant pas de compte PHPfrance

10 nov. 2010, 11:44

C'est possible que le problème soit ailleurs, après tout tu as dit que le serveur n'était pas optimisé, qu'est-ce que tu entends par là ?

Et puis, pourquoi dois-tu travailler les performances, les utilisateurs se plaignent de temps de réponse trop longs mais dans les faits, qu'est-ce que ça veut dire ? Tu as fais des mesures, des tests ? Il y des outils pour ça, au niveau de PHP ou de MySQL
Le serveur de production n'est pas optimisé (fichier my.cnf standard, directives dans le php.ini...). Mon serveur de test est optimisé (nous avons utilisé l'outil "tuning-primer.sh" qui permet d'analyser le serveur et dire ou il faut optimiser). Ce que l'on a fait. Le plus drôle c'est que le serveur de test est nettement moins puissant que le serveur de production et pourtant j'obtiens un temps de réponse inférieur sur celui-ci. Je dois travailler sur les performances car lorsque les utilisateurs clique sur le bouton "Enregistrer", le temps de réponse avoisine les 4 minutes de traitement avant de revenir sur la page de saisie. J'ai fait des mesures en utilisant juste un chronomètre.

Peux-tu me donner le nom des outils de mesure PHP et MySql.

Merci.

Gaara37
Invité n'ayant pas de compte PHPfrance

10 nov. 2010, 11:45

bon...

en tout cas les requête préparer comme t'as fait ne sont pas bonne, avec mysql_* oublie
Peux-tu m'en dire plus ?

Merci.

ViPHP
ViPHP | 5462 Messages

10 nov. 2010, 11:47

bon...

en tout cas les requête préparer comme t'as fait ne sont pas bonne, avec mysql_* oublie
Peux-tu m'en dire plus ?

Merci.
sur ?

Gaara37
Invité n'ayant pas de compte PHPfrance

10 nov. 2010, 11:50

bon...

en tout cas les requête préparer comme t'as fait ne sont pas bonne, avec mysql_* oublie
Peux-tu m'en dire plus ?

Merci.
sur ?
Sur le fait que mes requêtes préparées ne sont pas bonne avec mysql_*... Que dois-je faire pour améliorer ?

Merci.

ViPHP
ViPHP | 5462 Messages

10 nov. 2010, 11:54

oublie les requêtes préparées c'est trop de travaille pour pas grand chose au final

Gaara37
Invité n'ayant pas de compte PHPfrance

10 nov. 2010, 12:00

oublie les requêtes préparées c'est trop de travaille pour pas grand chose au final
? Je suis perdu, certaines réponses plus haut me conseillent de les utiliser... Je ne comprends plus !!!
Pour info, entre temps, j'ai demandé l'activation de PDO et c'est désormais Ok. Tu en parlais dans un post précédent, tu penses que ça changerait quelque chose au niveau du temps de traitement ?

Merci
@+

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

10 nov. 2010, 12:01

oublie les requêtes préparées c'est trop de travaille pour pas grand chose au final
Tu pourrais pas faire des messages de plus d'une ligne une fois de temps en temps ? Tu lui dis d'abandonner un conseil qui lui a été donné dans ce fil (mais tu l'as peut-être pas lu), la moindre des choses ce serait de proposer une solution alternative non? :roll:

Qu'est-ce qui te gêne dans les requêtes préparées ? Je vois pas où il y a "beaucoup de travail", et à exécuter les mêmes requetes 60 fois ça semble être une solution logique non?

ViPHP
ViPHP | 5462 Messages

10 nov. 2010, 12:14

oublie les requêtes préparées c'est trop de travaille pour pas grand chose au final
Tu pourrais pas faire des messages de plus d'une ligne une fois de temps en temps ? Tu lui dis d'abandonner un conseil qui lui a été donné dans ce fil (mais tu l'as peut-être pas lu), la moindre des choses ce serait de proposer une solution alternative non? :roll:

Qu'est-ce qui te gêne dans les requêtes préparées ? Je vois pas où il y a "beaucoup de travail", et à exécuter les mêmes requêtes 60 fois ça semble être une solution logique non?
je fais pas faire un roman sur le fait l'idée de faire des requêtes preparées est bonne, mais avec l'extension mysql faut oublier,
beaucoup de travail parce que faut refaire tout l'api de requête preparer pour l'extension, faut recréer le bind, ce qui fait qu'au lieu de faire 1 requête en fera 3 et qu'a la place de faire 4 ligne en en fera 30

Gaara37
Invité n'ayant pas de compte PHPfrance

10 nov. 2010, 14:28

Re bonjour,

Malgré certaines divergences d'opinion je continue de chercher en me basant sur les requêtes préparées. J'utilise désormais les fonctions liés à PDO. Cela fonctionne pas mal pour mes premières de vérification, mais je n'arrive pas à mettre à jour.

Voici la requête préparé pour l'update :
$mise_encarton = $bdd->prepare("update etj420 set num_carton = '$num_carton', code_site = '$_SESSION[codesite]' where (num_liaison = :num_liaison)");
$num_carton et $_SESSION[codesite] sont des variables qui ne bouge pas.

Et voici l'éxécution :
$mise_encarton->execute(array('num_liaison' => $codebarre[$i]));
Rien ne se met à jour. J'ai également essayé avec la méthode suivante :
$mise_encarton->bindValue(':num_liaison', $codebarre[$i]);
$mise_encarton->execute();
Même résultat, rien ne se met à jour. Ou est mon erreur ?

Merci pour votre aide.
@+ tard

ViPHP
ViPHP | 5462 Messages

10 nov. 2010, 14:34

si t'as PDO tout de suite c'est mieux, par contre comme t'as fais ta connexion ?

Gaara37
Invité n'ayant pas de compte PHPfrance

10 nov. 2010, 14:39

Quelques infos grâce à la gestion des erreurs de PDO, voici là ce que j'ai pour l'update en message d'erreur :
Warning: PDOStatement::execute() [function.execute]: SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute. in saisie_trt.php on line 109
Ca veut dire quoi ?
Merci
@+ tard

ViPHP
ViPHP | 5462 Messages

10 nov. 2010, 14:48

ca veux dire que tu fais plusieurs requête en même temps sans libérer les ressources, si tu veux récupèrer qu'un seul résultat d'une requête, il faut faire un closeCusor() après le fetch()

Gaara37
Invité n'ayant pas de compte PHPfrance

10 nov. 2010, 14:55

ca veux dire que tu fais plusieurs requête en même temps sans libérer les ressources, si tu veux récupèrer qu'un seul résultat d'une requête, il faut faire un closeCusor() après le fetch()
C'est exactement ça, je viens de trouver et d'appliquer ce paramètre et ça fonctionne, j'ai pu mettre à jour tous les codes passés en paramètre.
Je vous tiendrais au courant.

@+ tard

ViPHP
ViPHP | 5462 Messages

10 nov. 2010, 15:00

cool, par contre je te conseil de ne pas faire ca :
"update etj420 set num_carton = '$num_carton', code_site = '$_SESSION[codesite]' where (num_liaison = :num_liaison)"
mais plutot
UPDATE `etj420` SET `num_carton` = :num_carton, `code_site` = :code_site WHERE `num_liaison` = :num_liaison
en mettant les paramètres dans le execute

ViPHP
AB
ViPHP | 5818 Messages

10 nov. 2010, 17:12

Ton code est plus lisible, et tu es passé à PDO, c'est déjà une bonne mise à jour car comme indiqué en bas de cette page il est déconseillé d'utiliser mysql pour les nouveaux projets.

Concernant les requêtes préparées, il est recommandé de les utiliser pour faire des requêtes dans des boucles mais comme indiqué dans la doc, les gains seront d'autant plus important que les requêtes sont complexes. Avec des requêtes simples il est logique que les gains soient moins importants.

Cela dit tu auras fait le maximum pour optimiser les performances de ce code en l'état.
Si cela ne suffit pas, maintenant tu sais que ce n'est pas le code qu'il faut optimiser mais la méthode qu'il faut revoir.