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 averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 18
    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à...
    ben à chaque tour de boucle la fonction sizeof(); est appelée et elle est relancée à chaque fois, donc on recalcule le sizeof du tablo $arr... alors que si ça devient une valeur fixe à chaque fois le tour de boucle est plus rapide.
    on compare une valeur fixe à une autre valeur fixe plutot que comparer une valeur fixe à une valeur sas cesse recalculée.

    j'espère que c assez clair.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 18
    Par défaut
    Je tiens à dire merci pour ce bench, car il m'a bcp servi et bcp appris.
    Alors merci d'avoir pris le temps de le faire et de le partager avec les co-internautes.

  3. #3
    Membre confirmé Avatar de lunart
    Homme Profil pro
    Administrateur système et réseau
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur système et réseau

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Par défaut optimisation de mon code <-> interractivité
    bonjour
    Je ne sais pas si c'est la meilleur façon de faire ce que je veux faire (à savoir afficher en dessous mon formulaire des données en fonction des réponses de mon formulaire.
    J'ai écrit ça pour le formulaire (dans un page html:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <body>
    <table border=0 width="100%">
    <tr><td>
    <A Href="JavaScript:top.close();"><IMG SRC="../../Global/Img/fermer.gif" Border=0 width="100" height="24"></A></center>
    </td>
    </tr>
    </table>
    <Hr>
    <p><ul><li>
        <center>
          <H2 align="left"><font size="6" face="Geneva, Arial, Helvetica, san-serif"> 
            <font size="6">Menu :</font></H2>
        </center>
    <ol><ul>
    <li><A href="info.php"><font size=3>Vers page d'information pour tous <font></A>
    <br>
    <li>
     
    <form action="fo.php" method="post">
        Nom  :  <input type="text" name="username"><br>
        Prénom: <input type="text" name="prenom"><br>
        <input type="submit" name="submit" value="Ce qui me concerne">
    </form>
     
    </center>
    </body>
    et ça pour la page php qui fait le tris:
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <body>
    <div>
    <?php
    include('menu.htm');
    ?>
    </div>
    <div>
    <?php
    $fichier=fopen("../../Export/EXP.csv", "r");
    //$largeurcol=(10,200,10,40,40,40,40,70,70);
    $orig="<table border=1 width=1300 bordercolor=#CCCAFF cellpadding=6 cellspacing=1>";
    $orig .= "<tr bgcolor=#CCCAFF valign=center><td width=80><FONT size=2><b>Demande N°</b></font></td><td width=400><FONT size=2><b>Description de la demande</b></font></td><td width=50><FONT size=2><b>Car</b></font></td><td width=80><FONT size=2><b>Nom CI</b></font></td><td width=80><FONT size=2><b>Prénom CI</b></font></td><td width=60><FONT size=2><b>Phase</b></font></td><td width=65><FONT size=2><b>Statut</b></font></td><td width=80><FONT size=2><b>Date de création</b></font></td><td width=80><FONT size=2><b>Date butée</b></font></td><td width=60><FONT size=2><b>Prénom bénéficiaire</b></font></td><td width=60><FONT size=2><b>Nom bénéficiaire</b></font></td></tr>";
    while (!feof($fichier))  //on parcourt toutes les lignes
      {
       $ligne = fgets($fichier, 300); // lecture du contenu de la ligne
       $tabli =explode(";",$ligne);
       $tempo = $tabli[10];
       for($i=10;$i>2;$i--)
         {
          $tabli[$i]=$tabli[$i-1];
         }
       $tabli[2] = $tempo ;
       $_POST['username'];
       $_REQUEST['username'];
       import_request_variables('p', 'p_');
       $_POST['prenom'];
       $_REQUEST['prenom'];
       import_request_variables('p', 'p_');
       $p_username = strtoupper($p_username);
       $p_prenom = strtoupper($p_prenom);
     
       if($tabli[3]=="$p_username" && $tabli[4]=="$p_prenom")
       {
        $orig .= "<tr><td>";
        $regroup = implode("</td><td>", $tabli);
        $orig .= $regroup;
        $orig .= "</td></tr>";
       }
       elseif($p_username== "PER" && $p_prenom == "AL")
       {
        $orig .= "<tr><td>";
        $regroup = implode("</td><td>", $tabli);
        $orig .= $regroup;
        $orig .= "</td></tr>";
       }
     
      }
    $orig .= "</table>";
    fclose($fichier);
    if($p_username!=null)
    {
    $b = html_entity_decode($orig);
    echo $b;
    }
     
    ?>
    </div>
    </body>
    Désolé pour la longueur du message.
    Est ce que ce code vous parraît satisfaisant?
    Peut on faire autrement que de passer par le $orig et de concaténer mes chaines de caractère?

    Merci Pierre

    P.S. si ce code peut servir à quelqu'un servez vous

  4. #4
    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
    j'ai pas bien compris ton truc, mais si tu veux concaténer du bazar pour l'écrire plus loin, utilise une variable comme t'a fait, sinon tu peux écrire directement aussi echo "....."

    bon pour la lisibilité de ton code, vire tout de suite les <font>, <b> et autres trucs de ce genre, et passe aux styles CSS, tu verras, ça sera + facile à maintenir ton code, et le code sera + léger et + lisible.

  5. #5
    Membre confirmé Avatar de lunart
    Homme Profil pro
    Administrateur système et réseau
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur système et réseau

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Par défaut
    Je demande de tout afficher à la fin car il sagit de tableaux en code html
    et je ne crois pas que ça marchera si j'utilise echo.

    Merci pour le conseil des CSS (cependant je n'y connais vraiment rien)
    mais je n'ai jamais manipulé de CSS est-ce facile à mettre en place?

    Merci Pierer

  6. #6
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    CSS est extrêment smple à mettre en place : la Doc CSS au Format HTML Zippé ou au Format PDF
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  7. #7
    Nouveau candidat au Club
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Par défaut
    Dans une fonction, est-ce qu'on est obligé de faire un unset à la fin de la fonction de toutes les valeurs créées dans la fonction si on veut que çà soit optimiser à mort OU est-ce que ces valeurs sont d'elles mêmes unset(er) dès le moment où l'appel à la fonction a été fait !

    Autre question, personnellement je fais toutes mes requetes et la construction en html de la mise en forme de ces données en haut de page. JE rassemble tout dans une variable $toto. Je ferme ensuite ma connexion MySQL. Et je fais un echo $toto dans le body de la page qui est déjà préformatée avec un template dreamweaver. Est-ce c'est bon comme çà ?

    Ensuite, après le </html> je fais un unset des variables que j'ai utilisé. Est-ce utile en toute fin de page ?

    Merci encore pour vos précieux conseils

  8. #8
    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
    Salut

    Non, appeler unset() est inutile en fin de fonction et en fin de script : PHP s'en charge.
    Parfois (souvent), il ne faut pas penser à l'optimisation d'un script (réduire le temps d'exécution) mais à l'organisation du code (permettre une relecture facile).

  9. #9
    Nouveau candidat au Club
    Inscrit en
    Mai 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 3
    Par défaut
    Citation Envoyé par Yogui
    Salut

    Non, appeler unset() est inutile en fin de fonction et en fin de script : PHP s'en charge.
    Parfois (souvent), il ne faut pas penser à l'optimisation d'un script (réduire le temps d'exécution) mais à l'organisation du code (permettre une relecture facile).
    Donc on a donc tout intérêt à mettre nos traitements dans des fonctions ?

    Quant à la relecture facile, tu entends pour le développeur ou simplement pour PHP ?

    Autre question bête :
    si j'ai une structure de ce type:
    requete1
    traitement1
    requete2
    traitement2
    requete3
    traitement3

    ai-je intérêt à fermer mysql après CHAQUE requête ? ou simplement de le faire à la fin de mon script !?!

  10. #10
    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
    J'entends pour le développeur car PHP ne "lit" pas, il "parse".
    Tu as intérêt à mettre tes traitements répétés dans des fonctions, pas les autres.

  11. #11
    Membre confirmé Avatar de lunart
    Homme Profil pro
    Administrateur système et réseau
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur système et réseau

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Par défaut
    est ce que le language peut poser des problèmes de compatibilité avec des vieux browsers ou des browsers peu communs (mozilla, epiphany, ...)?
    est-ce que les pages seront plus longues à charger?

    merci

  12. #12
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 299
    Par défaut
    Bien sur que si echo fonctionnera, echo envoit du texte, si ce texte est du html valide alors ton navigateur en fera quelque chose. Ceci dit il existe des librairies pour générer une table html directement, ce qui te fait un code plus lisible.

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2002
    Messages : 299
    Par défaut
    Les CSS rendent les pages bcp plus legeres, donc rapides, mais en effet de tres vieux navigateurs ne les interpretent pas tres bien ou pas du tout. Enfin franchement les navigateurs étant gratuits, qui traine encore un ie4 ou un ns4?
    Je conseille de développer via Mozilla (ou galeon, thunderbird) qui respecte les standards, puis de vérifier dans IE si c ok.

  14. #14
    Membre confirmé Avatar de lunart
    Homme Profil pro
    Administrateur système et réseau
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur système et réseau

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Par défaut
    Selon toi cedric le code suivant devrait fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?
    echo "<table>";
    echo "</tr>";
    for($i=0;i<5;i++)
    {
      echo "<td>";
      echo $i;
      echo "</td>";
    }
    echo "</tr>";
    echo "<table>";
    ?>
    j'ai un doute mais je vais essayer demain.

    Bon je sent que CSS est intéressant je vais me renseigner merci pour le site.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Août 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 9
    Par défaut
    Citation Envoyé par cedricgirard
    Je conseille de développer via Mozilla (ou galeon, thunderbird) qui respecte les standards, puis de vérifier dans IE si c ok.
    Plutot Firebird (enfin firefox maintenant) parce que Thunderbird c'est un client mail
    Citation Envoyé par lunart
    Selon toi cedric le code suivant devrait fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?
    echo "<table>";
    echo "</tr>";
    for($i=0;i<5;i++)
    {
      echo "<td>";
      echo $i;
      echo "</td>";
    }
    echo "</tr>";
    echo "<table>";
    ?>
    j'ai un doute mais je vais essayer demain.

    Bon je sent que CSS est intéressant je vais me renseigner merci pour le site.
    Oui ca devrait marcher mais remplace les echo "bidule" par des echo 'bidule', ca sera d'autant plus rapide. Et puis à la fin tu as écrit <table> au lieu de la balise fermante </table>

  16. #16
    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
    et y'a un </tr> au début, ça devrait être un <tr>... mais le principe est là.
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      echo "<td>"; 
      echo $i; 
      echo "</td>";
    s'abrège très bien en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      echo '<td>' . $i . '</td>';
    il vaut mieux faire une concaténation plutôt que plusieurs echo.

  17. #17
    Membre confirmé Avatar de lunart
    Homme Profil pro
    Administrateur système et réseau
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur système et réseau

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Par défaut
    merci pour les conseils
    désolé d'avoir fait ça à la vavite.
    Pierre

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 33
    Par défaut
    Très intéressant ce post !
    Avec le bench en aide,cela pourrait faire l'objet d'un tuto.

    Sinon je me posais la question à partir de quand est-il interessant de faire des mysql_free_result().Je me osuviens avoir essayé sur un script après une grosse requete avec bcp de resultats mais en ajoutant d'autres mysql_free_result(),ca n'a rien changé.

    Sinon j'ai une autre astuce( il ne me semble pas l'avoir vu ):
    Plutot que dans une boucle afficher a chaque boucle le texte,préférez l'enregistrer dans une variable pour l'afficher après:
    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for($i = 0;$i < 4;$i++){
            echo '<select value="'.$i.'">'.$i.'</select>';
    }
    Préferez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for($i = 0,$string = '';$i < 4;$i++){
            $string .= '<select value="'.$i.'">'.$i.'</select>';
    }
    echo $string;
    Pour éviter des for(),on peut faire aussi à la mode du C:
    Et pour les fichiers textes,il vaut mieux lire le fichier ligne par ligne je crois et s'arrêter une fois que l'info cherchée est trouvée plutot que de lire le fichier en entier puis de chercher après.

    De manière générale ,evitez de recreer des fonctions qui existent déjà:
    Pas de fread(par exemple) puis de explode(),mais plutot fgetcsv().

    J'ai lu qque part aussi que mysql_fetch_object() etait perceptiblement + long que mysql_fetch_array() ou autre.

    En tt cas c'est un super post ,j'ai appris plein de trucs
    MErci à tous

  19. #19
    Invité de passage
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1
    Par défaut
    Bonjour à tous et à toutes, ce topic est vraiment interressant, on y apprends pas pas mal de choses !
    J'aimerai savoir pour ma part si le fait d'utiliser beaucoup d'objets dans ses projets ralentissait considérablement le script ou bien c'est négligeable ?
    Je me pose la question si vous pouvez y répondre même si elle peut paraitre un peu bête.

    D'avance je vous remercie.

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 33
    Par défaut
    C'est une question interessante et je crois que cela peut ralentir,mais après je sais pas .
    Moi j'en avais une autre:vaut-il mieux utiliser des fonctions mysql ou php ?
    MD5 ou md5 ?

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