IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de donn�es Discussion :

Optimisation de scripts PHP/MySQL [D�bat]


Sujet :

PHP & Base de donn�es

  1. #261
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Par d�faut
    Question : est-il pr�judiciable de faire trop d'appels de fonctions en php ?
    J'ai tendance � le faire pour mieux maintenir le code et rendre la prog plus facile, mais est-ce que �a rallentit sensiblement l'�xecution ?

    genre j'ai carr�ment fait une fonction du style :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    function Requete($reqSend, $msgerr="") {
    $req = mysql_query($reqSend);
    $lg = mysql_query($req) or die ("Erreur SQL : ".$reqSend." / ".$mysql_error()." / ".$msgerr);
    return $lg;
    }
    Mais j'esp�re que �a rallenti pas trop les requetes... Zen pensez quoi ?

    edit : et m�me question sur la POO !

  2. #262
    Membre confirm�
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    116
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 116
    Par d�faut
    absolument personne ?

  3. #263
    Membre �prouv�
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    F�vrier 2005
    Messages
    3 509
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : SQL
    Secteur : Finance

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 3 509
    Par d�faut
    Si tu estimes qu'il y a besoin d'avoir une fonction fait le. Il es pr�f�rable d'avoir des fonctions plut�t que du code r�p�t�. M�me si la fonction est utilis� qu'une fois �a permet d'y voir plus claire pour une relecture ou debuggage.
    Je ne pense pas que cela relenti de fa�on signifactive.

  4. #264
    Membre �m�rite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    763
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 763
    Par d�faut
    Il est inutile de faire des fonction pour simplement utiliser des fonctions natives �a allourdis et le code et le traitement...

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    function requete($sql)
    {
         $result = mysql_query($sql) or die ('Erreur SQL ['.$sql.'] : '.$mysql_error());
         return $result;
    }
    mieux vaut prendre la peine de coder le or die directement dans le code... .. .

    Sinon Blustuff je trouve tes remarques peu pertinentes et ce pour plusieurs raisons... tout d'abord personnellement (et je suis un des rare) j'utilise les simples quotes MEME dans mes requetes sql... ensuite il n'y a pas de petites optimisation tout est bon � prendre quand on optimise (� partir du moment ou �a ne g�ne pas dans la lisibilit� du code) m�me quelques centi�mes de seconde... quelques centi�mes de seconde par ci + quelques centi�mes de seconde par l� +... �a peut faire un voir plusieurs dixi�me(s) de seconde... et quand bien m�me le gain est quasi nul cela permet de prendre certaines bonne habitudes ce qui ne peut �tre que b�n�fique... ta remarque est donc, � mon avis hors sujet... par contre tu le fais remarquer � juste titre optimiser php ne veux pas dire juste optimiser le code mais aussi la configuration de php et le serveur qu'il l'�x�cute... .. .

    Pour finir je dirais qu'il ne faut pas utiliser de bench fait main � l'int�rieur du code c'est trop peu fiable mieux vaut utiliser une extension comme xDebug... .. .

    sinon � rajouter au tableau des erreurs courantes en terme d'optimisation

    - utiliser strpos � la place de ereg si on utilise pas d'expression r�guli�re
    - utiliser les accolades � la place de substr pour r�cup�rer un charact�re fixe

    @ tchaOo�

  5. #265
    Membre �prouv� Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Par d�faut
    Moi j'utilise une fonction pour mes requettes, car je compte le nombre de requettes par page (pour les optimisation justement).

    C'est paradoxal, j'allourdie mon code pour l'optimiser lol.

  6. #266
    Membre �m�rite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    D�cembre 2005
    Messages
    763
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2005
    Messages : 763
    Par d�faut
    Citation Envoy� par Death83
    Moi j'utilise une fonction pour mes requettes, car je compte le nombre de requettes par page (pour les optimisation justement).

    C'est paradoxal, j'allourdie mon code pour l'optimiser lol.
    Je fais pareil � la diff�rence pret que j'utilise une class d'abstraction SGDB... donc la il y a un interet � ne pas utiliser les fonctions natives... dans laquelle si le mode de tra�age est activ� un logger est instanci�... mais si le site est en prod le logger n'est pas instanci� r�sultat �a alourdit le code de deux if (un avant la requ�te et un apr�s) donc autant dire que �a l'allourdie de quasiment rien quand le site est en prod... .. .

    @ tchaOo�

  7. #267
    Invit�(e)
    Invit�(e)
    Par d�faut
    apprenez aussi � d�normaliser votre base de donn�es pour �viter les jointures multiples dans vos select.

  8. #268
    R�dacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    F�vrier 2004
    Messages
    13 721
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activit� : Directeur technique

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 13 721
    Par d�faut
    Oui, enfin, faites attention avec la d�normalisation, �a peut am�liorer la vitesse de traitement mais cela n'optimise ni l'espace disque (au contraire) ni la quantit� de traitements (il faut souvent utiliser une sorte de mise en cache).
    Bref, attention � la d�normalisation : la normalisation n'est pas l� pour faire un joli mot de vocabulaire.

  9. #269
    Invit�(e)
    Invit�(e)
    Par d�faut
    Citation Envoy� par Yogui
    Oui, enfin, faites attention avec la d�normalisation, �a peut am�liorer la vitesse de traitement mais cela n'optimise ni l'espace disque (au contraire) ni la quantit� de traitements (il faut souvent utiliser une sorte de mise en cache).
    Bref, attention � la d�normalisation : la normalisation n'est pas l� pour faire un joli mot de vocabulaire.
    Oui en effet , c'est vrai on ne fait pas n'imporque quoi comme dans tout.

    Mais d�normaliser est souvent indipansable pour les sites � fortes consultations.

    Les jointures sous mysql sont p�nalisantes comme toute base de donn�es du reste . FAITES LE TEST VOUS MEME !!

    injectez 500 000 lignes dans une seule table et faites une requ�te avec et sans jointure STUPEFIANT.

    Ma m�thode est la suivante :

    en imaginant que vous souhaitiez mette en place un site immobilier ( de consultations de petites annonces ) comme c'est le cas por moi en r�gion paca.

    une personne souhaitant vendre son bien glisse une petite annonce dans le site .

    cette petite annonce , vous en conviendrez peut faire appel � plusieurs tables

    de r�f�rence , PAYS , VILLE , REGION , TYPE DE BIEN ETC ...... qui lors de sa consultation fera appel � ces m�mes tables pour reconstituer celle-ci.

    eh bien moi je cree une table de consultation qui contiendra toutes les donn�es dont la requ�te aura besoin pour s'ex�cuter donc je n'ai qu'une seule table , c'est vrai que cela oblige a refaire une insertion dans cette table
    insert select (.....) mais de toutes les facons il faut valider � la main cette petite annonce ,c'est � ce moment pr�cis que je d�normalise donc aucune incidence sur le mod�le de donn�es.


  10. #270
    R�dacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    F�vrier 2004
    Messages
    13 721
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activit� : Directeur technique

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 13 721
    Par d�faut
    Sans �tre expert dans ce domaine (faute d'occasion), il me semble que tu peux utiliser des proc�dures stock�es, des vues et d'autres m�canismes automatis�s. Me tromp�-je ?
    Je ferai un bench d�s que possible...

  11. #271
    Invit�(e)
    Invit�(e)
    Par d�faut
    Citation Envoy� par Yogui
    Sans �tre expert dans ce domaine (faute d'occasion), il me semble que tu peux utiliser des proc�dures stock�es, des vues et d'autres m�canismes automatis�s. Me tromp�-je ?
    Je ferai un bench d�s que possible...
    C'est vrai j'utilise pas mal les proc�dures stock�es sous ORACLE et MYSQL
    pour un intranet .Mais vois-tu en h�bergement mutualis� c'est souvent impossible , les h�bergeurs se refusent � activer ces services , sous pr�texte que cela p�nalise les serveurs , en d�di� je dis pas le contraire.

    Dans le cas pr�sent ce serait plutot un trigger qu'il faudrait utiliser;


  12. #272
    Membre �prouv�
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    F�vrier 2005
    Messages
    3 509
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : SQL
    Secteur : Finance

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 3 509
    Par d�faut
    Citation Envoy� par gseverin
    C'est vrai j'utilise pas mal les proc�dures stock�es sous ORACLE et MYSQL
    pour un intranet .Mais vois-tu en h�bergement mutualis� c'est souvent impossible , les h�bergeurs se refusent � activer ces services , sous pr�texte que cela p�nalise les serveurs , en d�di� je dis pas le contraire.

    Dans le cas pr�sent ce serait plutot un trigger qu'il faudrait utiliser;

    Je savais pas que les hebergeurs jouaient les pinces avec les proc�dures stock�es et autre. Je pense que �a p�nalise plus le serveur de faire la m�me chose en code que le serveur de base de donn�es.

  13. #273
    R�dacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    F�vrier 2004
    Messages
    13 721
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activit� : Directeur technique

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 13 721
    Par d�faut
    Ce n'est pas qu'ils d�sactivent ces fonctionnalit�s mais plut�t qu'ils utilisent un serveur MySQL bien trop ancien (3.23) qui ne les supporte pas. Il faudrait passer � au moins 4.2 pour que cela devienne int�ressant ; au mieux, il faudrait une version 5.x...

  14. #274
    Invit�(e)
    Invit�(e)
    Par d�faut je ne crois pas
    Citation Envoy� par Yogui
    Ce n'est pas qu'ils d�sactivent ces fonctionnalit�s mais plut�t qu'ils utilisent un serveur MySQL bien trop ancien (3.23) qui ne les supporte pas. Il faudrait passer � au moins 4.2 pour que cela devienne int�ressant ; au mieux, il faudrait une version 5.x...
    non non , les versions de mysql que d�tiennent les h�bergeurs ont la possibilit� d'�tre install�es en d�sactivant ces services.

    d'ailleurs chez infomaniak comme chez nexxen ces fonctionnalit�s sont inactiv�es

    version INFOMANIAK : Distrib 5.0.22


  15. #275
    Membre �clair�
    Inscrit en
    Avril 2003
    Messages
    397
    D�tails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Par d�faut (magnifique topic)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    SELECT pseudo FROM membres LIMIT 40,20
    Solution optimis�e
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    SELECT pseudo FROM membres WHERE id_membre BETWEEN 40 AND 60
    OK, mais "le probl�me" est que le site vit et que certains membres (ou topic pour un autre exemple) seront supprim�s.
    Il est donc impossible d'assurer que l'on obtiendra 20 r�sultats.

    Ma question est, doit-on alors pass� par un mix des 2 ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    SELECT pseudo FROM membres WHERE id_membre>$last_id LIMIT 20
    Cela impose de passer le dernier id affich� en param�tre en cas de pagination.

  16. #276
    Membre �prouv�
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    F�vrier 2005
    Messages
    3 509
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : SQL
    Secteur : Finance

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 3 509
    Par d�faut
    Concernant le limit. C'est bien mais au dela d'un certain nombre d'enregistrement �a peut pomper de la ressource. Une solution consistait a utiliser un IN(.....)
    En gros il fallait r�cup�rer la limite basse de l'id et la limite haute. L'intervale entre les deux te donne une liste d'id. Cette liste d'id tu le place dans un IN()...
    Encor mieux avec une requete imbriqu�.
    SELECT * FROM maTable WHERE MonChamp IN(SELECT id FROM MaTable2 WHERE MonChamps BETWEEN 10 AND 20).

    Il faut faire des test avec un gros nombre d'enregisrements entre l'utilisation du limit et celle cit� ci-dessus avec le EXPLAIN SELECT ...

  17. #277
    Membre �clair�
    Inscrit en
    Avril 2003
    Messages
    397
    D�tails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 397
    Par d�faut
    Salut,

    Ta r�ponse est malheureusement � cot� du probl�me.

    L'int�r�t de la question traite le cas o� l'on ne connait pas la limite haute ni basse pour d�finir le nombre d'id dans l'interval :/

  18. #278
    Membre chevronn�
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par d�faut
    Pour r�pondre aux remarques deux pages plus t�t sur les guillements et simple quote, je trouve un peu �trange de parler d'optimisations � ce point ... Apr�s tout PHP est un language interpr�t�, il est totalement inutile d'optimiser ses scripts � la guillemet pr�t. Si on veut de l'optimiser on fait du C ou un autre language moins interpr�t�, mais a partir du moment o� on code en PHP on est pas non plus a une microseconde pr�t ..
    Testez le forum Fire Soft Board, un forum libre, gratuit et fran�ais.

    Syst�me de template de phpBB - Lisez la FAQ PHP avant toute question si vous d�buttez en PHP.

  19. #279
    Invit�(e)
    Invit�(e)
    Par d�faut ok
    Citation Envoy� par genova
    Pour r�pondre aux remarques deux pages plus t�t sur les guillements et simple quote, je trouve un peu �trange de parler d'optimisations � ce point ... Apr�s tout PHP est un language interpr�t�, il est totalement inutile d'optimiser ses scripts � la guillemet pr�t. Si on veut de l'optimiser on fait du C ou un autre language moins interpr�t�, mais a partir du moment o� on code en PHP on est pas non plus a une microseconde pr�t ..
    Je suis d'accord avec toi , mais il faut savoir que suivant la popularit� du site
    que 1 microseconde par ici , 1 microseconde par la ca fait vite des seconces au final.


  20. #280
    Membre chevronn�
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par d�faut
    Effectivement, si ton script fait 500Ko et que tu utilises toutes les lignes une " au lieu d'une ' tu gagneras peut �tre un milli�me de seconde en appliquant l'optimisation

    Ce que je voulais dire c'est qu'il y a optimisations utiles, et optimisations inutiles. Un d�veloppeur qui connait parfaitement les optimisations microscopique de ce genre, mais qui n'est pas capable de cr�er un index corect sur sa base de donn�e, aura des scripts hyper lent ... Les plus grosses optimisations en PHP ca reste du c�t� des requ�tes SQL, et aussi de la mise en cache des calculs assez imposants dans le genre :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    if (!$result = cache_get('resultat'))
    {
       $result = ... // Gros calcul
       cache_put('result', $result);
    }
    L'utilisation de variables statiques peut aussi �tre un gain de temps, par exemple si on a une fonction smiley() :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function smiley($str)
    {
       static $smilies = null;
     
       if ($smilies === null)
       {
          // Récupération des smilies dans la database ou dans un répertoire
       }
     
       foreach ($smilies AS $origine => $replace)
       {
          $str = str_replace($origine, $replace, $str);
       }
       return ($str);
    }
    Testez le forum Fire Soft Board, un forum libre, gratuit et fran�ais.

    Syst�me de template de phpBB - Lisez la FAQ PHP avant toute question si vous d�buttez en PHP.

Discussions similaires

  1. [D�butant] Acc�l�rer et optimiser ses scripts PHP
    Par Metallic-84s dans le forum Langage
    R�ponses: 6
    Dernier message: 24/03/2006, 12h37
  2. [MySQL] [SGBD] Script PHP/MYSQL d'access FTP
    Par ChRom dans le forum PHP & Base de donn�es
    R�ponses: 1
    Dernier message: 09/01/2006, 01h52
  3. R�ponses: 9
    Dernier message: 05/01/2006, 12h24
  4. Recherche Login Script PHP & MySQL
    Par whbh dans le forum SQL Proc�dural
    R�ponses: 9
    Dernier message: 01/12/2005, 16h45
  5. [MySQL] [Script]Optimisation de scripts Php/MySQL (2)
    Par copy dans le forum PHP & Base de donn�es
    R�ponses: 8
    Dernier message: 27/08/2004, 08h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo