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
    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.

  2. #2
    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.


  3. #3
    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...

  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
    Autre chose : bien lire la doc PHP

    les fonctions highlight_string, show_source et highlight_file acceptent un paramètre supplémentaire optionnel, lorsqu'il vaut true le résultat est renvoyé, et non écrit directement.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu = show_source('fichier.php', TRUE);
    est équivalent, mais beaucoup plus rapide que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ob_start();
    show_source ( 'fichier.php' );
    $contenu = ob_get_contents();
    ob_end_clean();

  5. #5
    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
    Citation Envoyé par _Gabriel_

    - ob_start et ob_end_flush ameliore aussi la vitesse du script.

    ++
    heu, tu es sur que cela ameliore la vitesse du script?
    j'ai toujours entendu dire que cela le relentissait, ce qui semblerait plus logique...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 27
    Par défaut
    Citation Envoyé par ermelir
    heu, tu es sur que cela ameliore la vitesse du script?
    j'ai toujours entendu dire que cela le relentissait, ce qui semblerait plus logique...
    j'ai aussi vu l'inverse et d'aprés mes test c'est vrai. bon c'est pas /10 aussi mais on peut gagner 1 à 2 dixiemes de secondes.
    ++

  7. #7
    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
    je vois toujours pas le rapport en un sizeof($arr) et un ob_start machin.

    Le ob_xxx c'est pour récupérer ou compresser... bref faire des choses sur le texte qui est en temps normal envoyé directement au navigateur.

    Donc si dans ton for tu as beaucoup de echo trucs d'accord, mais je vois pas en quoi bufferizer la sortie autour d'un for accélèrerai.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 27
    Par défaut
    je vois toujours pas le rapport en un sizeof($arr) et un ob_start machin.
    parce qu'il n'y en as pas. c'etait deux idées differentes. ( présence des - devant chaque phrase)

    ++

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    j'ai aussi vus et entendu qu'il etait preferable d'utilisé directement les variable
    exemple :

    exemple:1
    mieu que :

    exemple2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $champ=$_POST['champ'];
    echo $cahmp;
    ;

    a confirmé car je ne sait pas dutout si il y a une grosse diference

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par keusty78 Voir le message
    j'ai aussi vus et entendu qu'il etait preferable d'utilisé directement les variable
    exemple :

    exemple:1
    mieu que :

    exemple2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $champ=$_POST['champ'];
    echo $cahmp;
    ;

    a confirmé car je ne sait pas dutout si il y a une grosse diference
    ca depend de ca que tu veux faire, en tout inséré une valeur brute de POST est une faille (plus ou moins grave suivant les requêtes)

    et si tu veux afficher une valeur de POST dans le html il faut aussi faire un htmlspecialchars

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 188
    Par défaut
    oui c'est vrais stealth35 mai peut on pas proteger une variable directement meme si elle n'es pas defini? par exemple :

    mysql_real_escap_string($_POST['champ']);

    je dis sa comme sa mai en meme temp vous etes plus experimenter que moi dans le domaine

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par keusty78 Voir le message
    oui c'est vrais stealth35 mai peut on pas proteger une variable directement meme si elle n'es pas defini? par exemple :

    mysql_real_escap_string($_POST['champ']);

    je dis sa comme sa mai en meme temp vous etes plus experimenter que moi dans le domaine
    si $_POST['champ'] n'existe pas oui tu vas avoir une erreur,
    mais je te conseil d'oublier le mysql_real_escap_string, et de vite passé sous mysqli ou PDO_MySQL

  13. #13
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Citation Envoyé par keusty78 Voir le message
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $champ=$_POST['champ'];
    echo $cahmp;
    ;...
    ne faite JAMAIS ça
    Une des options de PHP pour faciliter la vie du développeur était de justement le faire de façon automatique.

    il existe donc des Hack pour tenter de corrompre les scripts.

    Donc si vous affectez un champs d'un POST à une variable
    évitez que cette variable ait pour nom la clef du champ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $n_importe_quoi_d_autre_que_champ=$_POST['champ'];
    echo $n_importe_quoi_d_autre_que_champ;
    ;...[/QUOTE]
    A+JYT

  14. #14
    Membre averti
    Homme Profil pro
    Project manager
    Inscrit en
    Juin 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Project manager
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 11
    Par défaut
    Un petit ajout concernant l'optimisation des scripts php.
    Au lieu d'utiliser la fonction in_array il faudrait mieux utiliser isset(tab[index]) cvd rechercher sur l'index au lieu de la valeur.

  15. #15
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Bonjour,

    in_array n'a pas du tout la même sémantique.

    in_array ça revient à faire
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function chercher($valeur) {
      $trouve = false;
      for($index=0; $index < $tab.length(); $index++) {
        if($tab[$index] == $valeur) {
          $trouve = true;
        }
      }
      return $trouve;
    }
     
    cherche('valeur cherchée');

    Alors que isset($tab[$index]) ne vérifie pas que 'valeur cherchée' est dans le tableau, mais simplement qu'il existe une entrée dont on ne connait pas la valeur à l'index dans le tableau.

    On peut donc toujours utiliser une boucle PHP pour chercher dans un tableau. Mais ce sera toujours moins optimal que d'utiliser une fonction native C++ compilée dans le noyau.
    A+JYT

  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
    ah ça y est j'ai capté, tu voulais dire de ne pas mettre le sizeof($arr) dans l'instruction for... donc ça aurait été bien que tu dise ce qu'il faille mettre. Il a fallu te cuisiner un peu pour que tu le sortes.

    Et le ob_xxx n'avait rien à voir là-dedans. Et bon de manière générale ça ralenti le script. Ce que ça peut améliorer c'est la compression des pages quand le navigateur l'accepte, donc la quantité de données transférées, mais la vitesse du script sur le serveur non, certainement pas.

  17. #17
    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
    un conseil pour clarifier les message, au lieu de mettre des - en début, on peut mettre des puces.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [list]
    [*] première ligne
    [*] deuxième ligne
    [/list]
    ce qui donne
    • première ligne
    • deuxième ligne

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 27
    Par défaut
    Citation Envoyé par iubito
    mais la vitesse du script sur le serveur non, certainement pas.
    j'ai pas forcement dit que c'etait une vérité flagrante et visiblement je suis pas le seul à l'avoir observé.
    ++

  19. #19
    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
    OK.

    Dans la même optique que le sizeof...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($i=$debut; $i<=$fin-1; $i++) {}
    est à remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($i=$debut; $i<$fin; $i++) {}
    on évite la soustraction dans le test, et on remplace <= par <.

  20. #20
    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 pour des echo multiples, préférer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo '<table>'
        .'  <tr>'
        .'     <td>'
        .'une concaténation de chaînes...';
    à des echo multiples
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    echo '<table>';
    echo '  <tr>';
    echo '    <td>';
    echo 'un echo pour chaque ligne c'est pas le top!';
    ...
    ou alors dans ce cas-là ne pas mettre dans les balises php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ?><table>
      <tr>
        <td>Dans ce cas, ça sera transformé en un seul echo multiligne...<?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