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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut
    Si vous avez d'autres choses à tester dites-le moi, j'ai construit ce bench en relisant mes fonctions de mon projet, pour optimiser le bazar...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 44
    Par défaut
    Au fait une question. Quand on utilise while avec un mysql_fetch_* :

    while( $row = mysql_fetch_array($result_BDD) )

    c'est pas la peine de mettre de each? Le mysql_fetch_array s'occupe du pointage?

  3. #3
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut
    en fait il faut bien différencier le while et le foreach.
    Tu peux faire un foreach sur un tableau ou sur quelque chose dont tu connais la longueur.

    L'algo est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    POUR CHAQUE ELEMENT du tableau
       ...instructions...
    FIN POUR CHAQUE
    Le while execute tant qu'une condition est remplie.
    while(true) boucle à l'infini puisque true (vrai) est toujours vrai.
    Donc un while(mysql_fetch_*), il faut regarder que mysql_fetch_* renvoie quelque chose, ou renvoie null quand il n'a plus rien à renvoyer.
    L'algo est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TANT QUE mysql_fetch_ renvoie quelque chose (!= null)
       ...instructions...
    FIN TANT QUE
    Le fetch renvoie les lignes une à une donc tu ne sais pas au début combien il y a de lignes.
    Tu peux faire un mysql_numrows pour avoir le nombre de résultat, mais un foreach ne marche pas puisque tu connais uniquement le nombre, tu n'a pas récupéré les infos.

  4. #4
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 133
    Par défaut
    voila je fais un peu de pub mais j'ai realisé quelques tests sur certaines fonctions, notamment la lecture de fichier en local et a distance et le parcours de tableaux.
    d'autres tests sont en cours de realisation, mais si deja il y en a que cela peut interesser ...
    http://www.phplibrairies.com/index.p...1&tutorial=147

  5. #5
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 3
    Par défaut
    Citation Envoyé par iubito
    Citation Envoyé par _Gabriel_
    salut,

    - les calculs répétés dans les boucles du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($i=0;$i<sizeof($arr);$i++)
    ca c'est pas bon!!!
    peux-tu préciser un peu, je capte pas là...
    simplement, à chaque itération de la boucle, il doit tester la condition, donc re-calculer à chaque fois la taille du tableau. La suggestion est de ne le calculer qu'une seule fois et stoquer le résultat dans une variable. Ainsi on sait à quoi comparer à chaque fois, sans recompter le nombre d'éléments par sizeof

  6. #6
    DgG
    DgG est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 22
    Par défaut
    Un truck aussi, faut essayer de rapprocher le plus possible le mysql_connect du mysql_close.

    Moi par exemple, ca se connecte au debut puis ca se ferme avant d'envoyer du html (dans h_page.php)

  7. #7
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 17
    Par défaut
    Est-ce que la fonction mysql_close() est vraiment utile ?
    Ca a un INpact sur la vitesse d'execution ? Sur la sécurité ?

    melmel

  8. #8
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut
    De toute façon dès que ta page php est exécutée entièrement, les connexion sont fermées (équivalent à mysql_close).
    donc vitesse ça change rien
    sécurité je pense pas...
    par contre une connexion à mysql (c'est une ressource) prend de la place en mémoire. Faire un mysql_close libère donc de la mémoire.
    A noter que PHP dispose d'un garbage collector.
    + d'infos sur les ressources ici : http://fr.php.net/manual/fr/language.types.resource.php

    C'est du même ordre que le mysql_free_result après un mysql_query (voir ici).

  9. #9
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut
    Pour écrire en plus propre encore le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($i=0;$i<sizeof($arr);$i++)
    on peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for($i=0,$j=sizeof($arr); $i<$j; $i++)
    tout en une ligne ! optimisé niveau vitesse

  10. #10
    DgG
    DgG est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 22
    Par défaut
    Sinon, ya la mise en cache qui peut etre interresante :
    http://www.idfr.net/etude_apache/fr/caching_opcodes.php

    Enfin, pour MySQL ça change rien...

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 5
    Par défaut
    Je crois qu'on s'est un peu egarer par rapport a la question posé de depart
    Pour te repondre j'ai mis dans un while un msql_fetch_row($sql) et ca marche tres bien j'ai fait un menu deroulant un tableau plein d'autres encore vraiment ca marche pas de souci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while( $row = mysql_fetch_row($sql))
    {
      echo"<tr><td>$row[0]</td></tr>\n<tr><td>$row[1]</td></tr>";
    }
    Ce code fonctionne a merveille si bien sur tu a plusieur champs dans ta base
    Pense que le premier champs de ta base est toujours 0
    voila n'hesite pas a me contacter pour de futures questions

  12. #12
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    emrys, il a déjà été dit que mysql_fetch_array n'est pas plus lent que mysql_fetch_row et ajoute un confort d'utilisation.

  13. #13
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut
    Aller, un petit coup d'optimisation comme on en a parlé dans ce topic :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while( $row = mysql_fetch_row($sql))
    {
      echo"<tr><td>$row[0]</td></tr>\n<tr><td>$row[1]</td></tr>";
    }
    =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while( $row = mysql_fetch_row($sql))
    {
      echo '<tr><td>'. $row[0] .'</td></tr>
            <tr><td>'. $row[1] .'</td></tr>';
    }
    Au quel cas, faire un tableau avec une cellule par ligne, c'est pas terrible, vaut mieux faire des listes <ol> ou <ul>, avec du style

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 7
    Par défaut Optimisation
    Bonjour,

    Voilà, depuis très longtemps je me pose de grosses questions sur l'optimisation du php mais j'ai souvent du mal à trouver des réponses.
    Alors déjà, question générale : comment faire pour tester efficacement un script ou carrément l'éxécution d'une fonction, j'ai bien un script qui calcule le nombre de milisecondes entre le début et la fin mais ca donne des chose assez différentes à chaque fois (forcément vu l'unité de temps) : est-ce qu'il faut multiplier l'éxécution et faire une moyenne, ou y-a-t-il des outils ?

    En attendant de savoir faire, est-ce que quelqu'un aurait des réponses aux questions suivantes :
    1- le fait de faire des fonctions imbriquées les unes dans les autres et de les appeler est-il beaucoup plus long que d'exécuter le script en bloc tel quel (parce que c'est quand même bien pratique pour la lisibilité) ?
    2- lorsqu'on appelle dans une page php un grand nombre de fonctions mais de façon variable, vaut-il mieux les mettre toutes dans un seul fichier B, faire l'include une seule fois quite à ne pas servir de la moitié des fonctions ou vaut-il mieux mettre les fonctions dans des fichiers différents et ne charger chaque fichier que si on en a besoin mais donc faire plus d'includes et même beaucoup ?
    Bon je crois que c'est tout pour commencer
    Merci d'avance !

  15. #15
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut Re: Optimisation
    Citation Envoyé par erzebet
    Bonjour,

    Voilà, depuis très longtemps je me pose de grosses questions sur l'optimisation du php mais j'ai souvent du mal à trouver des réponses.
    Alors déjà, question générale : comment faire pour tester efficacement un script ou carrément l'éxécution d'une fonction, j'ai bien un script qui calcule le nombre de milisecondes entre le début et la fin mais ca donne des chose assez différentes à chaque fois (forcément vu l'unité de temps) : est-ce qu'il faut multiplier l'éxécution et faire une moyenne, ou y-a-t-il des outils ?
    Oui, multiplie, par 100, 1000, 10000, 1 million si il faut, y'a toujours des petites variations, mais ça donne une idée. Si tu as 2 possibilités d'implémentation d'un algo, ça te permet de comparer.

    En attendant de savoir faire, est-ce que quelqu'un aurait des réponses aux questions suivantes :
    1- le fait de faire des fonctions imbriquées les unes dans les autres et de les appeler est-il beaucoup plus long que d'exécuter le script en bloc tel quel (parce que c'est quand même bien pratique pour la lisibilité) ?
    fonctions = + lisible, + souple (tu modifie un truc ça le modifie pour toutes les utilisations que tu vas faire.
    Au niveau mémoire, la fonction va prendre l'espace mémoire nécessaire juste le moment de son exécution, puis le libère en sortant.
    ça ne fait pas ralentir de créer des fonctions.

    2- lorsqu'on appelle dans une page php un grand nombre de fonctions mais de façon variable, vaut-il mieux les mettre toutes dans un seul fichier B, faire l'include une seule fois quite à ne pas servir de la moitié des fonctions ou vaut-il mieux mettre les fonctions dans des fichiers différents et ne charger chaque fichier que si on en a besoin mais donc faire plus d'includes et même beaucoup ?
    Tout dépend, c plus une question de lisibilité je pense.
    Si tu as une série de fonctions pour faire le café, et une autre grosse série pour servir une bière fraîche, c + propre de séparer dans 2 fichiers.
    D'un autre côté, un seul fichier pour les fonctions c + facile à inclure.
    A moins que je me trompe, avoir un include avec beaucoup de fonctions dont pleins qui ne vont pas servir, ça va pas bouffer de la mémoire pour rien.
    A confirmer quand même, doit y avoir un 'tit chouilla de mémoire utiliser pour "déclarer" toutes les fonctions, y compris les non-utilisées, mais ça doit pas être énorme.

  16. #16
    m@
    m@ est déconnecté
    Membre expérimenté
    Avatar de m@
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 143
    Par défaut
    au niveau de l'appel des fonctions de façon générale, appeler une fonction prend quand même un peu de proc, mais rien de comparable aux gains de lisibilité

    (appel d'une fonction =
    + empilement de l'adresse de retour
    + saut au début de la fonction
    <exécution de la fonction>
    + récup de l'adresse de retour sur la pile
    + saut à cette adresse
    soit 4 instructions en plus : négligeable)

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 7
    Par défaut
    Merci beaucoup de vos réponses.
    En gros d'après ce que vous me dites, quelles que soient les solutions que je choisis pour ces différents problèmes, les écarts d'efficacité ne seront pas significatifs donc, même si apparemment il vaut mieux en gros faire le moins d'include possible mais que c'est pas si grave que ça, après c'est une question de confort de lisibilité, c'est bien ça ?

  18. #18
    Membre éclairé
    Avatar de iubito
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2003
    Messages : 389
    Par défaut
    lisibilité et réutilisation
    Si tu as 2 algos quasi identiques (juste un chiffre qui change ou un truc dans le style), tu fais une fonction avec un paramètre.
    Le jour où tu change ton algo, tu le fais qu'à un seul endroit.

  19. #19
    m@
    m@ est déconnecté
    Membre expérimenté
    Avatar de m@
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 143
    Par défaut
    pour moi le seul moment où la lisibilité doit être sacrifiée pour la puissance, c'est que ton serveur est à genoux où que tu as du code qu'il est vraiment capital d'exécuter à toute vitesse, ce qui est plutôt rare en PHP...

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 7
    Par défaut
    Ah oui quand même )
    Je pensais que la lisibilité devait être sacrifiée plus que ça au profit de la puissance moi. Bon ben c'est bien tout ça.
    j'ai une autre colle : quelle expression est-elle plus rapide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if($toto==0)
    {
        if($tata==0)
        else
    }
    else
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($toto==0 && tata==0)
    else if($toto==0 && tata!=0)
    else
    Merci d'avance.

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