Hébergement du site en PHP et Mysql par WDMédia-hébergement
Vous aussi adpotez les éléPHPants de Vincent Pontier !  
CONCOURS
 
 
PLUS DE PHP
 
 
PLUS DE JAVASCRIPT
 
COMMENT CA MARCHE
 
 
EXPLIQUE-MOI
 
 
NEWS LETTER
 

 
PARTENAIRES
 
Découvrez scriptsphp.org
Découvrez phpteam.net
Tout sur les expressions régulières
IE sucks :-)
 
DESIGN DU SITE
 
"echo" : lapin ou tortue ?

Lorsque l'on veut envoyer des données sur le flux de sortie avec PHP et que l'on utilise le mot-clef "echo", plusieurs possibilités s'offrent à nous. Mais quelle forme est la plus performante ?

Quelles sont les différentes formes ?

Il existe en gros 4 formes d'utilisation de "echo" :

  1. La forme "brute" :

    <?php
    echo 'la valeur de x est ';
    echo
    $x;
    ?>
  2. La forme "chaîne dynamique" :

    <?php
    echo "la valeur de x est $x";
    ?>
  3. La forme "concaténation" (le point) :

    <?php
    echo 'la valeur de x est ' . $x;
    ?>
  4. la forme "multi-paramètres" (la virgule) :

    <?php
    echo 'la valeur de x est ', $x;
    ?>

Quelle est la plus performante ?

Certains pourraient être tentés de dire que la forme "chaîne dynamique" est la plus performante, mais ce n'est malheureusement pas le cas.

Observons la décomposition faite par la fonction "token_get_all" sur le code N°2 :

ValeurType
<?php\nT_OPEN_TAG
echoT_ECHO
 T_WHITESPACE
" 
laT_STRING
 T_ENCAPSED_AND_WHITESPACE
valeurT_STRING
 T_ENCAPSED_AND_WHITESPACE
deT_STRING
 T_ENCAPSED_AND_WHITESPACE
xT_STRING
 T_ENCAPSED_AND_WHITESPACE
estT_STRING
 T_ENCAPSED_AND_WHITESPACE
$xT_VARIABLE
" 
; 
\nT_WHITESPACE
?>T_CLOSE_TAG

Vous remarquez que tous les mots et espaces de la chaîne de caractères sont séparés.

Si nous décomposons maintenant le code N°4 :

ValeurType
<?php\nT_OPEN_TAG
echoT_ECHO
 T_WHITESPACE
'la valeur de x est 'T_CONSTANT_ENCAPSED_STRING
, 
 T_WHITESPACE
$xT_VARIABLE
; 
\nT_WHITESPACE
?>T_CLOSE_TAG

Nous constatons désormais que la chaîne de caractères est entière ce qui conduit PHP à effectuer moins de traitements.

Remarque : L'avantage de la forme N°2 est sa clarté, mais je vous laisse lire l'article "Les chaînes de caractères : soyons cohérents !".

C'est l'une des trois autres, mais laquelle ?

En fait, les formes "brute" et "multi-paramètres" sont sémantiquement identiques, mais le code étant un peu plus long pour la forme "brute", nous pouvons considérer qu'il y a une très légère différence en faveur de la forme "multi-paramètres".

Comparons donc les formes "concaténation" et "multi-paramètres" !

La forme "concaténation" consiste à réserver de l'espace mémoire pour accueillir le résultat de la concaténation avant de l'envoyer sur le flux de sortie alors que la forme "multi-pramètres" envoie chaque chaîne de caractères successivement sur le flux de sortie sans allouer d'espace mémoire inutilement. On pourrait donc s'attendre à ce que la forme "multi-pramètres", en plus de consommer moins de mémoire, soit plus performante, mais ce serait aller bien vite en conclusion.

En effet, un autre phénomène entre en jeu : l'envoi sur le flux de sortie. En réalité, cette opération est gourmande en ressources et de multiples appels engendrent un ralentissement non négligeable. De ce fait, la concaténation consomme plus de mémoire, mais elle est beaucoup plus performante que le multi-paramètres.

Utilisons donc systématiquement la concaténation !

Houlà, doucement, encore une fois n'allons pas trop vite en conclusion.
Pourquoi ? Et bien parce que nous faisons tous une erreur grave depuis le début : enchaîner les "echo" dans nos scripts.
Effectivement, il y a fort à parier que vos scripts ne contiennent pas qu'un seul "echo" et ces appels multiples engendrent le ralentissement dont nous avons parlé précédemment.

Que faudrait-il faire alors ?

La première solution qui viendrait à l'esprit serait de concaténer toutes les chaînes de caractères dans une variable globale que l'on envoie sur le flux de sortie à la fin du script, mais ce n'est pas nécessaire.
En effet, le résultat peut être obtenu de façon identique en utilisant la fonction "ob_start" qui place les données de sortie dans un tampon et les envoie lors de l'appel à "ob_end_flush" ou lorsque le script se termine.
Si vous reprenez vos scripts et que vous ajoutez cette fonction avant le premier "echo", vous allez constater un gain de performance fort appréciable.

Mais dans ce cas, la forme "multi-paramètres" devient plus performante !

C'est exact, et le gain est d'environ 10% par rapport à la version "concaténation".

Pour conclure correctement cette fois-ci, je vous conseille d'utiliser "ob_start" au début de vos scripts et d'utiliser la forme "multi-paramètres" de "echo".

Remarque : Vous pouvez combiner ob_start avec ob_gzhandler afin de faire d'une pierre deux coups : Accélérer le temps de génération et compresser le flux de sortie pour diminuer le temps de chargement de votre page par l'utilisateur.


Revenir aux mises au point



Ajouter une réponse
Nom
Email
Titre

Mise en forme : gras = [b]...[/b], italic = [i]...[/i], souligné = [u]...[/u], citation = [quote]...[/quote], lien = [url]liens_externe[/url] ou [url nom=texte]liens_externe[/url], code source : [code]...[/code]

Mémoriser mon nom et mon email : Oui Non
www.phpdebutant.org © 2017 - L'équipe de phpDebutant - Hébergement : WDMédia-hébergement
DEBUTEZ !
 
  0.  Introduction
  1.  Afficher une phrase ou une image
  2.  Afficher la date et l'heure
  3.  PHP dans du code HTML
  4.  La concaténation
  5.  Récupérer les valeurs d'un formulaire
  6.  Les structures de contrôle
  7.  Ecrire et lire dans un fichier texte
  8.  Les fonctions utilisateurs
  9.  Les variables d'environnement
  10.  Quelques fonctions utiles
  11.  SQL/MySQL (Create, Alter & Drop)
  12.  SQL/MySQL (Insert et Select)
  13.  SQL/MySQL (Delete et Update)
  14.  SQL/MySQL (Where)
  15.  Fonctions PHP pour mySQL
  16.  Interroger une table MySQL
  17.  Alimenter une ou plusieurs tables mySQL
  18.  Les pseudos-frames
  19.  Les sessions php4
  20.  Affichage page par page
  21.  Images dynamiques
  22.  Ca marche pas ?
  23.  Variables globales à OFF
  24.  Les variables dynamiques