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

Langage PHP Discussion :

echo d'une concaténation vs echo à plusieurs paramètres


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    OPi
    OPi est déconnecté
    Membre très actif
    Avatar de OPi
    Homme Profil pro
    en recherche d'emploi
    Inscrit en
    Août 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : en recherche d'emploi
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 74
    Par défaut echo d'une concaténation vs echo à plusieurs paramètres
    En PHP la commande echo est une instruction du langage et pas une fonction, et elle permet d'écrire par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $name = 'Olivier';
     
    echo 'Bonjour ', $name, '
    ';
     
    ?>
    ce qui donne le même résultat que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $name = 'Olivier';
     
    echo 'Bonjour '.$name.'
    ';
     
    ?>
    J'ai toujours (enfin toujours, mes débuts en PHP date de cet été) privilégié la première manière car elle me semblait plus performante. Mon résonnement était qu'un echo $a.$b.$c.$d; passait par les étapes suivantes :
    1. concaténation de $a et $b
    2. concaténation de ce résultat avec $c
    3. concaténation de ce résultat avec $d
    4. passage de ce résultat à echo qui l'affiche.

    Alors que echo $a, $b, $c, $d; passait tous les paramètres à echo qui avait en charge de faire le boulot. Mais un boulot qui se passe au niveau de l'implémentation de la commande echo et non plus au niveau de l'exécution du code PHP.


    Je me suis décidé à faire un test de vitesse avec ce code :
    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
    <?php echo 'Start
    ';
     
    $a = 'un pour commencer';
    $b = 'deux pour poursuivre';
    $c = 'trois plus long pour avoir un peu de texte quand même';
    $d = 'quatre encore un peu';
    $e = 'cinq on finit';
     
    for ($i=0; $i<100000; $i++) {
      echo $a.$i.$b.$i.$c.$i.$d.$i.$e.$i."\n";
    #  echo $a, $i, $b, $i, $c, $i, $d, $i, $e, $i, "\n";
    }
     
    echo 'End
    ';
     
    ?>
    Et à ma plus grande surprise, voici les résultats obtenu sur ma machine :
    ~0.8s pour la version avec les . : concaténation
    ~4.6s pour la version avec les , : plusieurs paramètres

    Pourquoi cette différence en défaveur de ce qui selon moi devrait être le plus rapide ?

    J'ai effectué ce test avec PHP 5.3.1 d'une installation XAMPP, sous Windows 7.

  2. #2
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    9a peut peut être s'expliquer parce que le nombre de paramètre à passer peut être variable.

    Du coup echo est obligé de compter le nombre de paramètre à concaténer et de boucler dessus.
    Alors que dans l'autre cas, il n'y a pas à faire ce travail.

    Et que dans tous les cas, je vois pas pourquoi une concaténation faite dans echo ou en dehors serait moins gourmande.

  3. #3
    OPi
    OPi est déconnecté
    Membre très actif
    Avatar de OPi
    Homme Profil pro
    en recherche d'emploi
    Inscrit en
    Août 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : en recherche d'emploi
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 74
    Par défaut
    Le nombre de paramètres est déterminé à la compilation. Et il n'y a aucune nécessité de les concaténer.

    echo avec plusieurs paramètres doit les afficher tous. Si le plus performant est de les concaténer qu'il le fasse, sinon qu'il se débrouille comme il veut mais qu'il le fasse bien.

    Je ne sais pas comment être clair, mais il me semble que les deux alternatives se jouent à des niveaux différents, et que c'est la bonne manière de faire qui est mauvaise car php est mal implémenté

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    De vieux benchs (je sais plus sur quel site) avaient mis en valeur que le echo multiparametres était plus performant.
    C'était il y a longtemps. Vu que la plupart des gens utilisent systématiquement la concaténation, des efforts on dû être faits dans ce sens.
    A la limite c'est de l'optimisation de quart de poil. Dans un usage normal la différence entre les deux est anecdotique.

  5. #5
    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
    test 1 : echo 'foo', 'bar'
    test 2 : echo 'foo' . 'bar'

    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
    number of ops:  3
    compiled vars:  none
    line     # *  op                 fetch          ext  return  operands
    -----------------------------------------------------------------------
       1     0  >   ECHO                                           'foo'
             1      ECHO                                           'bar'
             2    > RETURN                                         1
     
     
    number of ops:  3
    compiled vars:  none
    line     # *  op                 fetch          ext  return  operands
    -----------------------------------------------------------------------
       1     0  >   CONCAT                                 ~0      'foo', 'bar'
             1      ECHO                                           ~0
             2    > RETURN                                         1
    sachant qu'un CONCAT prend toujours 2 paramètres

  6. #6
    OPi
    OPi est déconnecté
    Membre très actif
    Avatar de OPi
    Homme Profil pro
    en recherche d'emploi
    Inscrit en
    Août 2005
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : en recherche d'emploi
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 74
    Par défaut
    stealth35 tu peux expliquer stp ?

    Le truc c'est que je me dis que si une optimisation est faite sur les concaténations, elle devrait être faite aussi sur l'exécution de l'echo avec les multiples paramètres. Et théoriquement je m'attends à ce que cet echo multiple soit au moins aussi rapide que la concaténation...

    Y a-t-il une spécification qui détermine un "comportement fin" de ces deux syntaxe ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/11/2014, 17h19
  2. Réponses: 15
    Dernier message: 03/08/2011, 20h43
  3. Réponses: 2
    Dernier message: 19/03/2009, 11h33
  4. Comment retourner plusieurs paramétre d'une procedure stockée?
    Par nic413 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 24/06/2006, 19h30
  5. Réponses: 3
    Dernier message: 25/04/2006, 11h30

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