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. #241
    Membre habitué Avatar de sigap
    Inscrit en
    Avril 2002
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 113
    Points : 166
    Points
    166
    Par défaut
    parce le processeur PHP évalue les instructions "echo", il est préférable d'utiliser echo 'hello world' au lieu d'utiliser echo "hello world". Avec les guillements PHP parcoure toute la chaine afin d'y chercher d'éventuelles variables. Si vous n'en proposez pas ? alors utilisez les quotes.
    Je suis ce que je suis grace à ce que nous sommes tous

  2. #242
    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
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Nous avons un tutoriel à ce sujet : http://pbnaigeon.developpez.com/tuto...phe-guillemet/

  3. #243
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Ce tutoriel est parfait pour induire tout le monde en erreur :

    • La lisibilité vaut dans les deux sens. Certes, il est très pertinent que dire que d'afficher de l'html est bien plus aisé avec des guillemets simples du fait de l'usage des guillemets doubles pour les attributs, mais il existe des cas où les guillemets doubles sont plus pratiques, notement pour les requêtes mysql. Ce détail est scrupuleusement omis.
    • L'auteur est-il conscient qu'il parle dans tout un paragraphe d'une optimisation de l'ordre d'une à cinq microsecondes, tout en sachant qu'un script moyen a un temps d'execution de l'ordre de 100 ms ? (0.01 % d'optimisation par chaine)

  4. #244
    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
    Points : 29 985
    Points
    29 985
    Par défaut
    Il me semble que tu n'as pas bien lu le tutoriel. En effet, il traite ces deux points que tu mets en valeur : la section IV Conclusion évoque et illustre un cas d'utilisation de chaîne contenant des apostrophes (il s'agit de SQL, justement), donc un cas d'utilisation où les guillemets sont bien plus intéressants pour délimiter la chaîne.

    Concernant ton commentaire sur l'optimisation ridicule, oui, l'auteur en est conscient et l'a précisé dans le tutoriel. Lis attentivement.

    À l'avenir, merci de ne pas poster de remarques cinglantes à 2h43 du matin car cela semble affecter ton jugement.

  5. #245
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Non, je maintiens ce que j'ai dit, à 14h18 de l'après midi où tout le monde est réveillé car, en précisant les points que j'avance :

    • La lisibilité du code avec les guillemets double doit être abordé dans le paragraphe où on parle de la lisibilité qui s'appelle "II. Lisibilité du Code"
    • L'auteur parle de, je cite, "Une différence significative du simple à plus du quadruple !!!" ou encore "cela peut changer beaucoup de choses dans la durée d'affichage de la page ou dans le temps d'exécution du script.". Quand on est sur un sujet qui parle d'optimisation, il est important de ne pas dire de telles choses. Le temps aurait pu être 100 fois plus long, ça n'aurait rien changé tant que ça concernait des microsecondes. C'est l'exemple parfait de ce qu'il ne faut pas faire en optimisation. (Remarque valable aussi pour les optimisations de code en assembleur)


    Cela dit, l'article n'est absolument pas inutile, mais il doit être révisé.

  6. #246
    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
    Points : 29 985
    Points
    29 985
    Par défaut
    Hmmm...

    Un gain de performances n'est-il pas une optimisation ? Il s'agit peut-être de microsecondes, c'est un gain. Il s'agit ici d'optimisation, nous sommes donc parfaitement dans le sujet.

    Pour rappel, une optimisation ne prend de valeur que dans le cadre d'un site à forte fréquentation (lourde charge serveur).

    La formulation est peut-être parfois exagérée, mais c'est pour faire prendre conscience au lecteur de l'importance de ce choix (apostrophes ou guillemets). Comme il est dit dans l'article, il faut savoir faire preuve de discernement.


    Si tu souhaites encore disserter sur des détails de formulation, merci de contacter directement l'auteur de l'article. Ce sujet d'optimisation n'est le bon endroit pour en débattre.

  7. #247
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    C'est un bon endroit pour en débattre. Savoir optimiser un script n'est pas une chose évidente. Sur un script de plusieurs dizaines de milliers de lignes, on peut analyser ligne par ligne s'il existe une façon plus efficace de faire. (Et y passer tout une année) Ce n'est pas la bonne manière de procéder. Il convient lorsque l'on parle d'optimisation de savoir identifier les goulots d'étranglement, ce qui revient au même que de savoir lorsqu'il est intéressant de chercher à optimiser une portion de code ou non. Le sujet parle d'optimisation, on est exactement dans le sujet. Tu l'avais dit plus avant, je pense que tu n'as pas changé d'avis, il vaut parfois mieux chercher à rendre le code lisible que le rendre rapide. C'est un bon exemple, et on peut en tirer plein de bonnes conclusions.

  8. #248
    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
    Points : 29 985
    Points
    29 985
    Par défaut
    En effet et je vais plus loin : je pense qu'il est toujours préférable de bien organiser son code plutôt que de le rendre ultra efficace. À la longue, le code bien écrit sera très facile à maintenir tandis que du code mal écrit ne fonctionnera plus lorsque quelqu'un y mettra son nez (ou bien cette personne perdra de longues heures à étudier sa structure).

    L'optimisation, comme la sécurité, est toujours un compris entre ergonomie et efficacité.
    Pour réellement optimiser un script, il faudrait n'utiliser aucun wrapper (uniquement les fonctions fournies en standard avec PHP), ce qui augmente considérablement le temps de développement.

    L'optimisation d'un script passe par l'optimisation du temps de développement, l'optimisation de la patience des développeurs, etc.

  9. #249
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    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 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Question :
    Y a t'il une différence entre

    mysql_free_result($rs)
    et $rs = null ?

    Un me certifie que ceci revient au même et moi je pense que non. Concretement nous ne savons ce qu'il se passe dans le free_result.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  10. #250
    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
    Points : 29 985
    Points
    29 985
    Par défaut
    Concrètement, cela n'a pas une grande utilité à part libérer quelques minimes ressources avant que PHP le fasse de lui-même en terminant le script, ce qui surviendra quelques millièmes de secondes après ton mysql_free_result(). Cela dit, si tu utilises des connexions persistantes, le comportement change probablement.

    Pour te répondre, il est toujours préférable d'utiliser les fonctions spécifiques plutôt que les méthodes généralistes. En effet, cette fonction peut très bien libérer davantage que la simple variable (certainement quelque chose côté MySQL, etc.), alors que l'écraser se limiterait à libérer la mémoire associée.

  11. #251
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    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 488
    Points : 6 037
    Points
    6 037
    Par défaut
    C'est ce que je me disait aussi. En tous cas je m'oblige à le mettre ainsi que l'utilisation de unset() car lorsqu'il y a que 2-3 pélerins sur gain est trop infime pour que le serveur le remarque mais lorqu'il y toute la populasse qui tombe, là, la qualité du code et l'optimisation peut prendre toute son importance. Pour ce cas précis effectivement cela va se faire tôt ou moyennement tard.
    Merci.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  12. #252
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 73
    Points : 54
    Points
    54
    Par défaut
    Bonjour,

    Vaut-il mieux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ( isset($_POST['cat']) || isset($_GET['cat']) )
    {
    	$cat = ( isset($_POST['cat']) ) ? $_POST['cat'] : $_GET['cat'];
    }
    else
    {
    	$cat = 'lieux';
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if ( isset($_POST['cat']) )
    {
    	$cat = $_POST['cat'];
    }
    else if ( isset($_GET['cat']) )
    {
    	$cat = $_GET['cat'];
    }
    else
    {
    	$cat = 'toto';
    }
    ?

  13. #253
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    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 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par jpascal
    Bonjour,

    Vaut-il mieux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ( isset($_POST['cat']) || isset($_GET['cat']) )
    {
    	$cat = ( isset($_POST['cat']) ) ? $_POST['cat'] : $_GET['cat'];
    }
    else
    {
    	$cat = 'lieux';
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if ( isset($_POST['cat']) )
    {
    	$cat = $_POST['cat'];
    }
    else if ( isset($_GET['cat']) )
    {
    	$cat = $_GET['cat'];
    }
    else
    {
    	$cat = 'toto';
    }
    ?
    Je pense qu'en terme d'optimisation ça ne changera pas grand chose par contre en clareté oui.
    J'aurais plutot fait ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $cat = '';
    if($_SERVER['REMONTE_METHODE']=='POST'){
       if(isset($_POST['cat'])) $cat = $_POST['cat'];
    }elseif($_SERVER['REMONTE_METHODE']=='GET'){
       if(isset($_GET['cat'])) $cat = $_GET['cat'];
    }
    Alors pour ceci ? Là tu nous a montré avec une variable mais imagine qu'il y en a 10. Là, ça risque de devenir assez freestyle.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  14. #254
    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
    Points : 29 985
    Points
    29 985
    Par défaut
    La notation espacée ne me dérange pas le moins du monde, contrairement à celle proposée par beckerunited qui a ses inconvénients.
    @jpascal : En fait, tes deux propositions n'ont pas le même comportement. Il ne s'agit pas d'optimisation mais de pure logique. Fais des tests si tu ne vois pas ce que je veux dire mais prends garde à ces conditions, elles ne signifient pas la même chose.

  15. #255
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    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 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par Yogui
    La notation espacée ne me dérange pas le moins du monde, contrairement à celle proposée par beckerunited qui a ses inconvénients.
    @jpascal : En fait, tes deux propositions n'ont pas le même comportement. Il ne s'agit pas d'optimisation mais de pure logique. Fais des tests si tu ne vois pas ce que je veux dire mais prends garde à ces conditions, elles ne signifient pas la même chose.
    Personnellement, je ne comprend pas. Dans tous le cas il test si cat est définit en post ou en get. de la il récupère l'info dans le cas contraire il y en a une par defaut.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  16. #256
    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
    Points : 29 985
    Points
    29 985
    Par défaut


    J'ai compris... Ouaip, désolé, j'avais lu un peu rapidement.
    La 2° solution est meilleure simplement car elle évite de répéter les traitements. C'est plus optimisé, certes, mais surtout c'est mieux organisé, mieux structuré et plus facile à maintenir (surtout l'opérateur ternaire, à éviter).

  17. #257
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    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 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par Yogui


    J'ai compris... Ouaip, désolé, j'avais lu un peu rapidement.
    La 2° solution est meilleure simplement car elle évite de répéter les traitements. C'est plus optimisé, certes, mais surtout c'est mieux organisé, mieux structuré et plus facile à maintenir (surtout l'opérateur ternaire, à éviter).
    Ok,
    Concernant ma méthode ou y aurait il un inconvéniant?
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  18. #258
    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
    Points : 29 985
    Points
    29 985
    Par défaut
    D'une part, les accolades ne sont pas alignées, cela ralentit donc légèrement la lecture du code. Je déteste devoir chercher l'accolade ouvrante :/
    D'autre part, si la ligne contient de nombreux tests, tu seras obligé de la mettre sur plusieurs lignes, ce qui suppose une indentation, et là ça devient n'importe quoi : autant mettre l'accolade à la ligne, c'est plus clair.

    Nous avons un tuto en préparation à ce sujet.

  19. #259
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    La présentation du code est effectivement très importante : je me bat tout les jurs à mon boulot, parce que pour les autres membres de mon staff, seul importe le résultat.

    Mais c'est faux : la mise en forme et l'intelligibilité du code garantissent la pérénité du code, et sa réutilisation : quand on a 1000 lignes de codes sans commentaires, sans indentations, et avec des variables sans queue ni tete, perso je reprend le tout.

    Quand on développe, et ce dans n'importe quel langage, il faut penser au futur et au recyclage du code !!!!
    Veni Vidi Vici
    -------------------------
    Mes articles : developpez.com ou bien vbview.net
    -------------------------
    Et SURTOUT ne pas oublier la bible PHP : --> php_manual_fr.chm!!!
    Et aussi : --> pear_manual_fr.chm!!!

    Ou encore : --> Les tutoriaux & cours PHP de Développez.com
    -------------------------

  20. #260
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    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 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Citation Envoyé par Yogui
    D'une part, les accolades ne sont pas alignées, cela ralentit donc légèrement la lecture du code. Je déteste devoir chercher l'accolade ouvrante :/
    D'autre part, si la ligne contient de nombreux tests, tu seras obligé de la mettre sur plusieurs lignes, ce qui suppose une indentation, et là ça devient n'importe quoi : autant mettre l'accolade à la ligne, c'est plus clair.

    Nous avons un tuto en préparation à ce sujet.
    Concernant les accolades si c'est sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(...){ 
    et
    if(...)
    {
    Il y a deux écoles. Personnellement, j'utilise le premier cas et ça me ralentie pour le deuxième mais je mis fait si c'est ainsi.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

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