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

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/mySQL] conseils d'optimisation

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Page Précédente
Auteur Sujet :

[PHP/mySQL] conseils d'optimisation

n°1159036
nero27
Posté le 25-07-2005 à 14:20:44  profilanswer
 

Bonjour à tous !
 
Je viens de faire quelques recherches sur le forum à propos d'optimisation de code PHP (associé à MySQL dans mon cas) et je me rends compte qu'il n'y a pas vraiment de topic parlant de ça.
J'ai donc pensé que ce serait bien de pouvoir réunir tous les conseils d'optimisation de code dans un seul et même topic.
 
Alors, je vous écoute : donnez-moi vos conseils et je les ajouterai au fur et à mesure dans ce post ;)
 
Merci d'avance :jap:
 
-------------------------------------------------------------
 
Quelques adresses utiles :
 
- http://developpeur.journaldunet.co [...] eurs.shtml (Les 10 plus grandes erreurs en programmation PHP, à lire absolument)
- http://www.php.net/manual/fr/ (le manuel PHP en français)
- http://www.nexen.net/docs/php/anno [...] ctions.php (le manuel PHP, vu par Nexen.net, en français)
- http://php.developpez.com/
- http://www.phpindex.com/
- http://www.phpteam.net/
- http://dev.mysql.com/doc/refman/5.0/fr/ (le manuel MySQL en français)
- http://forum.hardware.fr/forum2.ph [...] page=1&p=1 (Scipts les plus recherchés, merci berceker united :jap:)
 
-------------------------------------------------------------
 
Optimisation de code PHP :
 
- Article très intéressant sur la différence entre les simples quotes et les doubles quotes
- Bien structurer les echo en évitant par exemple d'intégrer les variables dans les "".
exemple : éviter echo "afficher $valeur"; préférer echo 'afficher',$valeur;
- Utiliser mysql_fetch_row() ou mysql_fetch_assoc() plutôt que mysql_fetch_array() pour récupérer les données d'une requête.
 
-------------------------------------------------------------
 
Optimisation des requêtes MySQL :
 
- Les colonnes  
Si vous avez 10 colonnes dans votre table mais n'en voulez que 2, ne demander que ces 2 colonnes.  
SELECT champ_1, champ_2 From table1 au lieu de SELECT * From table1
 
- Les lignes  
Idem, en utilisant WHERE pour enlever les lignes dont on n'a pas besoin  
SELECT * from table1 WHERE champ_1 = 5  
 
Le HAVING a un fonctionnement un peu similaire au WHERE à une différence près : il est exécuté à la fin de la requête, juste avant le transfert. C'est pratique pour supprimer des lignes sans pouvoir le faire avec un WHERE.  
Par exemple, on à une table avec des lignes de facture (prix de l'article, quantité et identifiant de la facture), on veut le total de chaque facture, mais seulement celles dont le montant total est supérieur à 1000. On ne peut pas déterminer ce montant en traitant chaque ligne individuellement, donc le WHERE ne sera pas utile.  
SELECT id_facture, SUM(prix * quantite) AS total_facture FROM lignes_factures GROUP BY id_facture HAVING total_factures >= 1000  
 
- Les tris
Autant les faire directement en MySQL si c'est possible  
SELECT champ_1, champ_2 From table1 ORDER BY champ_1 ASC  
 
- Le comptage  
Vous voulez savoir le nombre de lignes qui respectent une condition dans une table.  
1ère solution : SELECT champ_1 FROM table_1 WHERE champ_1 = 5 puis utilisation de mysql_num_rows() pour connaître le nombre de lignes du résultat.  
Là, MySQL va transférer toutes les lignes vers PHP, qui va les mémoriser. Tout ca, juste pour savoir combien il y en a.  
 
2ème solution : SELECT COUNT(champ_1) AS nb_lignes FROM table_1 WHERE champ_1 = 5  
Là, le résultat ne contient qu'1 ligne et 1 colonne. C'est quand même moins volumineux, non    
 
(bon, si vous voulez aussi parcourir le résultat, mieux vaut la 1ère méthode puisque vous aurrez de toute façon besoin de récupérer toutes les lignes)  
 
- Utilisation du LIMIT  
Le LIMIT indique que l'on souhaite récupérer seulement une partie du résultat. Par exemple, en ajoutant LIMIT 10,25 à la fin de votre requête MySQL ne transférera que 25 lignes, en commencant à la 10ème.
 
Pratique, lorsqu'il est combiné avec un tri, lorque l'on veut afficher des données sur plusieurs pages, pour déterminer un "top n", récupérer les 10 données les plus vieilles/récentes...
 
Il est également utile d'utiliser LIMIT 0,1 lorsqu'on est sûr que la requête ne retournera qu'une seule ligne. Ceci évitera à MySQL de continuer à chercher après avoir trouvé le seul résultat.


Message édité par nero27 le 26-11-2005 à 15:36:05
mood
Publicité
Posté le 25-07-2005 à 14:20:44  profilanswer
 

n°1159085
nero27
Posté le 25-07-2005 à 15:04:56  profilanswer
 

Réservé...


Message édité par nero27 le 25-07-2005 à 15:48:25
n°1159091
nero27
Posté le 25-07-2005 à 15:09:28  profilanswer
 

Réservé ...


Message édité par nero27 le 25-07-2005 à 15:48:39
n°1159097
tofti
Posté le 25-07-2005 à 15:13:35  profilanswer
 

Voici un trés bon liens :
http://www.vulgarisation-informati [...] er-php.php
c'est un espece de "benchmark" sur la réactivité de diférentes écritures possibles. Les simple et double guillemets, les boucles sont mis a l'épreuves, trés utilise pour optimiser son code.


Message édité par tofti le 25-07-2005 à 15:14:27
n°1159102
sircam
I Like Trains
Posté le 25-07-2005 à 15:15:49  profilanswer
 

nero27 a écrit :

C'est un topic pour les conseils d'optimisation du code PHP avec MySQL ;)


Ca ne me paraît pas judicieux. Celui qui voudrait profiter des conseils PHP uniquement ou MySQL uniquement va se taper l'autre partie, qui ne lui sera d'aucun intérêt. Ca n'en sera que moins lisible.
 
Enfin bon, c'est ton tomic.  [:airforceone]
 
Est-il bien nécessaire d'aborder les micro-optimisations ? Genre refaire encore une fois la comparaison entre les différentes façons de concaténer ou de faire un output ?


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1159105
tofti
Posté le 25-07-2005 à 15:17:22  profilanswer
 

On me demande des conseils sur l'optimisations du code PHP et MySQl, moi j'en donne ... aprés, faut faire le tri, mais c'est pas  a moi de le faire ca :)


Message édité par tofti le 25-07-2005 à 15:17:37
n°1159109
nero27
Posté le 25-07-2005 à 15:18:28  profilanswer
 

Je trierai les infos en plusieurs parties :  
- php pur
- mysql pur
- php/mysql
 
On peut tout aborder je pense ;)

n°1159112
tofti
Posté le 25-07-2005 à 15:20:12  profilanswer
 

Tu aurais du réservé 3 parties, une seule, ca va etre short .. trés short ...

n°1159115
nero27
Posté le 25-07-2005 à 15:22:16  profilanswer
 

tofti a écrit :

Tu aurais du réservé 3 parties, une seule, ca va etre short .. trés short ...


A la rigueur, supprime ton post entre les deux miens, ça m'en fera déjà deux ;)

n°1159119
tofti
Posté le 25-07-2005 à 15:25:03  profilanswer
 

Voila, sircam, fait-en de meme ;-)

mood
Publicité
Posté le 25-07-2005 à 15:25:03  profilanswer
 

n°1159134
sircam
I Like Trains
Posté le 25-07-2005 à 15:41:08  profilanswer
 

tofti a écrit :

Voila, sircam, fait-en de meme ;-)


Cfé.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1159135
sircam
I Like Trains
Posté le 25-07-2005 à 15:41:53  profilanswer
 

Ensuite, tu parles d'optimisation, c'est un peu vague :
 
- Performance ?
- Sécurité ?
- Lisibilité et maintenance ?


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1159147
nero27
Posté le 25-07-2005 à 15:48:06  profilanswer
 

Je parle plutôt d'optimisation au niveau des performances !
Quelle fonction utiliser plutôt qu'une autre ? etc ...
;)

n°1159162
tofti
Posté le 25-07-2005 à 16:00:00  profilanswer
 

Tu pourrais tout faire, pas seulement performances ...

n°1159165
nero27
Posté le 25-07-2005 à 16:04:53  profilanswer
 

Pkoi pas !
On verra bien ;)

n°1159236
sircam
I Like Trains
Posté le 25-07-2005 à 17:20:44  profilanswer
 

nero27 a écrit :

Pkoi pas !
On verra bien ;)


Ca va rapidement être la foire si tu laisses partir dans tous les sens sans but précis. [:mlc]
 
A part ça, as-tu déjà fait un tour sur ce forum ? On parle régulièrement d'optimisations en tous genres, mais je ne vois rien dans ce topic. :o
 
Tu peux aussi faire des propositions, sur base de ce que la pêche sur Gougueule t'aura donné.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1159625
Ricco
Retour au pays
Posté le 25-07-2005 à 23:31:25  profilanswer
 

Ca pourrait être marrant de juger sur des exemples types non ?  
Genre, amene tes requetes à dos de chval et voyons comment les optimiser au mieux, non ? ;)


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
n°1159651
esox_ch
Posté le 25-07-2005 à 23:47:10  profilanswer
 

Parcontre les betch sur le site je les trouve un peu foireux ... genre le fgets qui lit les 255 premiers caracteres ... J'veux bien mais je connais peu de cas ou tu peux t'en servir sans un filesize() .. Ou le file qui retourne pas le meme type que le file_get_contents ... ou le file_exists qui controle si le ficher existe alors que le is_file controle juste si c'est un path "correct" ... Ah, et aussi le switch VS if/elseif qui est pas vraiment significatif sur 2 cas (meme si c'est effectivement le if/elseif qui gagne si jeme rappelle bien)...
 
Bref je trouve qu'il faudrait p-e un peu mieux structurer tout ça ...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1159670
micfont999
Simplement Moi
Posté le 25-07-2005 à 23:58:56  profilanswer
 

Je comprend pas bien quand vous parlez d'optimisation c'est quoi, c'est faire une seule ligne de commande pour une requete mysql (avec $machin = mysql_query( la requete sql) or die mysql_error(); ) au lieu de trois lignes, ou c'est autre chose.. Je vois pas trop en fait ce qu'il faut mettre dedant?? (désolé) :)

n°1159702
esox_ch
Posté le 26-07-2005 à 00:16:07  profilanswer
 

Non ce dont tu parles c'est de la mise en page ... On pourrait se demander si ça change qqch au perf mais ça doit etre de l'ordre de la nanoseconde sur 1'000'000'000 d'appels :D ... L'optimisation c'est par exemple d'eviter de faire un SELECT * FROM matable si de toutes façon on n'a l'intention que de prendre l'id ... En gros essayer de reflechir pour pas faire perdre de temps au serveur


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1159917
nero27
Posté le 26-07-2005 à 11:31:35  profilanswer
 

Pour commencer, y'a deux optimisations qu'on peut retenir :
- pour MySQL, éviter les champs inutiles dans une requête, comme l'a dit esox_ch
- bien structurer son code PHP : exemple, ne pas intégrer les variables dans les chaines des echo.
exemple :  
éviter  

Code :
  1. echo "afficher $valeur";


mais plutôt  

Code :
  1. echo 'afficher',$valeur;

n°1159975
micfont999
Simplement Moi
Posté le 26-07-2005 à 11:57:09  profilanswer
 

Hum okay, je vois maintenant, donc en fait moi j'optimise quedale :D :D :D à chaque fois je fait select * from matable (oui j'avou fouettez moi pour me punir :( )
et en plus je met toujours echo "afficher $valeur"; lol à par quand je doit concatener mon code.. :)
 
En clair j'ai encore quelques petites choses à apprendre.. :)
C'estun bon topic ça nero, il va servir à de nombreuses personnes je pense, continue à l'alimenter :)
 
@++ et bonne prog les gens. :)

n°1160027
Onesque
Derelict Otter
Posté le 26-07-2005 à 12:14:36  profilanswer
 

Salut!
 
Etant un tout jeune développeur PHP autodidcate, je me rends bien compte que je fais beaucoup de boulettes, et notamment que je ne structure pas mon code comme je devrais le faire.
 
Par exemple, je suis pas un adepte des fonctions alors qu'elles me simplifieraient bien la vie. Ensuite, je me rends bien compte que je réécris certains fragments de code plein de fois alors qu'il devrait y avoir moyen de le ne faire qu'une bonne fois pour toute. Mais comme la logique PHP-esque ne baigne pas encore mon esprit fatigué, ca ne me vient pas tout de suite :D
 
Donc puisqu'il s'agit ici de conseils d'optimisation, je vous suggère d'éventuellement donner quelques pistes de ce côté là, et vous garantit qu'y en a au moins un à qui ça servira :D
 
Merci!

n°1160072
micfont999
Simplement Moi
Posté le 26-07-2005 à 12:27:03  profilanswer
 

Onesque a écrit :


 
Par exemple, je suis pas un adepte des fonctions alors qu'elles me simplifieraient bien la vie.  
Ensuite, je me rends bien compte que je réécris certains fragments de code plein de fois alors qu'il devrait y avoir moyen de le ne faire qu'une bonne fois pour toute.


 
->> oui les fonctions  :lol:  :lol:  :lol:  
 

n°1160079
Onesque
Derelict Otter
Posté le 26-07-2005 à 12:32:10  profilanswer
 

Ben voilà :D
 
Non mais en fait, commme j'ai appris le peu que je connais en PHP sur des tutos, je sais ponctuellement faire des trucs, mais je n'ai pas la logique d'ensemble pour strucurer, aps me répéter... Or je pense que c'est le problème d'une majorité des développeurs débutants, surtout quand on n'a pas de prof pour nous instaurer d'office les bons réflexes :D
 
J'ai commencé à trvailler direct sur un projet, aprce que je pensais que c'était en me colletant direc' au concret que j'apprendrai le mieux et le plus vite. Ben j'ai appris plein de trucs, mais je ponds un code qui vous ferait surement bondir :o


Message édité par Onesque le 26-07-2005 à 12:32:37
n°1160132
esox_ch
Posté le 26-07-2005 à 13:09:16  profilanswer
 

C'est le probleme que j'ai eu aussi etant totalement autodidacte ... Apres ... c'est avec l'experience qu'on apprend a optimiser & co


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1160143
micfont999
Simplement Moi
Posté le 26-07-2005 à 13:17:28  profilanswer
 

Bahj'au eu un prof pendant deux ans, mais il nous à jamais appris ça :)
 
A croire qu'il en savait rien :D :D

n°1160167
esox_ch
Posté le 26-07-2005 à 13:34:21  profilanswer
 

Ou qu'ils ont autrechose a apprendre ... Désolé de te le dire mais je crois que dans ton cas il y a plus urgent que l'optimisation ... Mais bon de toutes façon c'est pas vraiment à l'ecole qu'on apprend ce genre de reflexe ... c'est en programmant pendant 10h et apres se rendre compte qu'en s'y prenant autrement on en aurait eu pour 10 min :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1160171
micfont999
Simplement Moi
Posté le 26-07-2005 à 13:36:34  profilanswer
 

esox_ch a écrit :

Désolé de te le dire mais je crois que dans ton cas il y a plus urgent que l'optimisation ...


 
Dit moi dit moi, c'est toujours bon à prendre les critiques :D et je ferais en sorte d'apprendre déjà ce que je dois :)

n°1160184
nero27
Posté le 26-07-2005 à 13:44:17  profilanswer
 

Onesque a écrit :

Salut!
 
Etant un tout jeune développeur PHP autodidcate, je me rends bien compte que je fais beaucoup de boulettes, et notamment que je ne structure pas mon code comme je devrais le faire.
 
Par exemple, je suis pas un adepte des fonctions alors qu'elles me simplifieraient bien la vie. Ensuite, je me rends bien compte que je réécris certains fragments de code plein de fois alors qu'il devrait y avoir moyen de le ne faire qu'une bonne fois pour toute. Mais comme la logique PHP-esque ne baigne pas encore mon esprit fatigué, ca ne me vient pas tout de suite :D
 
Donc puisqu'il s'agit ici de conseils d'optimisation, je vous suggère d'éventuellement donner quelques pistes de ce côté là, et vous garantit qu'y en a au moins un à qui ça servira :D
 
Merci!


Dans ton cas, il y a deux approches possibles :
soit tu utilises plusieurs fois le même code dans un script, soit tu utilises plusieurs fois le même code dans des scrits différents.
Dans le premier cas, tu crées la fonction en haut de ton script et tu y fais appel à chaque fois que tu en as besoin.
Dans le deuxième cas, tu crées un fichier dans lequel tu réunies tes fonctions puis tu l'appelles dans les scripts qui nécessitent ces fonctions en intégrant un require("fonctions.php" ); .Ensuite, tu peux utiliser les fonctions comme si elles avaient été créées dans le script.


Message édité par nero27 le 26-07-2005 à 13:45:18
n°1160192
micfont999
Simplement Moi
Posté le 26-07-2005 à 13:47:31  profilanswer
 

Et c'est pas mieux de faire la deuxième solution tout de suite?? Comme ça si un jour on veux réutiliser la fonction (dans son premier cas) on est obliger de retrouver la page sur laquelle on utilisait cette dernière,etc ,etc..  
 
Enfin je sais pas, c'est quoi la différence??

n°1160215
esox_ch
Posté le 26-07-2005 à 13:59:30  profilanswer
 

La 1ere est l'equivalent pas futé de la 2ème :p.
 
Parcontre utiliser les fonction (ou methodes) est autant utile que dangeureux ... Un debutant qui utilisera des fonction bloquera avec 80% de probabilité a des problemes de portée de variables, qu'il resoudra en foutant toutes ses variables en globales ou pire super-globales, ce qui sera tout autan stupide que d'avoir recopier 50 fois son code


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1160216
sircam
I Like Trains
Posté le 26-07-2005 à 13:59:39  profilanswer
 

micfont999 a écrit :

Et c'est pas mieux de faire la deuxième solution tout de suite?? Comme ça si un jour on veux réutiliser la fonction (dans son premier cas) on est obliger de retrouver la page sur laquelle on utilisait cette dernière,etc ,etc..  
 
Enfin je sais pas, c'est quoi la différence??


Faut voir si la fonction en question est générique et réutilisable.  [:airforceone]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1160220
micfont999
Simplement Moi
Posté le 26-07-2005 à 14:01:35  profilanswer
 

Oui ok, c'est vrai que si le fichier de connexion est blindé de fonctions inutiles, ça ralentira pas mal le script.. Non..?

n°1160251
Onesque
Derelict Otter
Posté le 26-07-2005 à 14:18:01  profilanswer
 

nero27 a écrit :

Dans ton cas, il y a deux approches possibles :
soit tu utilises plusieurs fois le même code dans un script, soit tu utilises plusieurs fois le même code dans des scrits différents.
Dans le premier cas, tu crées la fonction en haut de ton script et tu y fais appel à chaque fois que tu en as besoin.
Dans le deuxième cas, tu crées un fichier dans lequel tu réunies tes fonctions puis tu l'appelles dans les scripts qui nécessitent ces fonctions en intégrant un require("fonctions.php" ); .Ensuite, tu peux utiliser les fonctions comme si elles avaient été créées dans le script.


 
 
Pour prendre un exemple concret, je pensais à la déclaration de mes variables suite à des formulaires. Pour le moment, je me tape à chaque fois le  
 

if(isset($HTTP_POST_VARS['variable']))
 $variable=$HTTP_POST_VARS['variable'];
else $variable="";


 
Je me rends bien compte que c'est stupide de refaire tout ca manuellement à chaque fois et qu'une fonction (merci micfont999 :D) serait bien plus adaptée. Mais voilà, ca je m'en rends compte après avoir farci 25 pages de lignes de code redondantes :D
 
Cela dit pour ce cas-là, je vais m'y atteler :D
 

n°1160258
micfont999
Simplement Moi
Posté le 26-07-2005 à 14:19:46  profilanswer
 

Tu peux toujours le faire pour tes prochains sites :) :D et laisser celui la tout moche au niveau du code :D (ok je sort)

n°1160262
Onesque
Derelict Otter
Posté le 26-07-2005 à 14:21:36  profilanswer
 

Nan justement, cui-là va me servir de site "chef d'oeuvre" pour valider mon diplôme, alors faut que le code soit un minimum bien pensé :D (même si pour ce foutu diplôme j'ai pas eu de vrais cours de php - 4 heures à faire des echo, c'est un peu léger)

n°1160270
micfont999
Simplement Moi
Posté le 26-07-2005 à 14:24:59  profilanswer
 

Voui effectivement vu sous cet angle... :) enfin ne nous éloignons pas trop du sujet :D

n°1160275
esox_ch
Posté le 26-07-2005 à 14:27:25  profilanswer
 

Heu un conseil, evite le HTTP_*_VARS, c'est $_POST , $_GET ,... depuis un petit bout de temps ...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1160280
Onesque
Derelict Otter
Posté le 26-07-2005 à 14:29:16  profilanswer
 

Vi, merci. J'ai copié collé ca d'une page ou j'ai pas encore fait cette modif, mais on m'avait déjà fait la remarque :D

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3
Page Précédente

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

  [PHP/mySQL] conseils d'optimisation

 

Sujets relatifs
Modifier un fichier PDF avec PHPAide pour amelioration script PHP
[prog PHP][resolu] Faire un PHP qui archive un siteStructure base de données MySQL : correcte ou pas ?
[PHP] Utiliser un framework MVC ?[PHP] Récupérer l'url de la page cible protégée?
PHP dans Java Scriptphp et mysql
[Apache/PHP/MySQL] Newbie - Pb de connecxion distante (en local: OK) 
Plus de sujets relatifs à : [PHP/mySQL] conseils d'optimisation


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