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 :

[Système] qu'est-ce qui est plus rapide : un echo ou un affichage pur HTML ?


Sujet :

Langage PHP

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 347
    Points : 136
    Points
    136
    Par défaut [Système] qu'est-ce qui est plus rapide : un echo ou un affichage pur HTML ?
    Bonjour,

    suposons que j'ai une grosse page HTML dans laquelle je dois insérer/concaténer juste une valeur dynamique, genre un $toto.

    qu'est-ce que sera plus rapide à l'exécution:

    une fonction qui renvoie ça :
    echo "<HTML>...etc ".$toto ."..suite HTML</html>";

    ou bien un fichier .php ainsi :
    <HTML>
    ...etc
    <?php echo $toto";?>
    ..suite HTML
    </html>";

    ? une idée ?
    un ami m'a dit "arrête de générer de l'affichage HTML si ya pas de dynamisme PHP dedans ça ralentira son exécution et surchagera apache pour rien"
    raison pas raison ?

  2. #2
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    Salut,

    c'est sur que si tu n'as que quelques variables php à afficher ça ne sert à rien de tout afficher en php.
    Mais de toutes façon ça ne doit pas changer grand chose !! fais un petit test, il y a des script de test pour cela, ils te disent en combien de temps ta page a été générée.
    Sinon, plus simple mais plus aléatoire peut-être, sur firefox utilise l'addon FasterFox

    P.S : dans ton exemple, tu écris cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     echo "<HTML>...etc ".$toto ."..suite HTML</html>";
    encore mieux, écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     echo "<HTML>...etc $toto ..suite HTML</html>";
    En php, ce qui est entre guillemet est interprété, ce qui est entre quote ne l'est pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $a="pierre";
    echo "Salut $a, ça va ?";
    //Affichera Salut pierre ça va ?
    echo 'Salut $a, ça va ?';
    //Affichera Salut $a, ça va ?
    Bons tests

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    en ce qui concerne echo, le plus rapide c'est les simples guillemets, sans concaténation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<html>...etc ', $toto ,'..suite HTML</html>';
    mais pour ta question, cela dépend vraiment du nombre de $toto que tu désires afficher, et de ce qu'il représente par rapport au reste de la page (à savoir le etc et le suite)

    s'il n'y a qu'un seul $toto, il vaut mieux tout afficher en html et n'afficher que $toto en php

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Citation Envoyé par francis m
    en ce qui concerne echo, le plus rapide c'est les simples guillemets, sans concaténation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<html>...etc ', $toto ,'..suite HTML</html>';
    Non, il me semble que la syntaxe guillemets simples + concaténation est bien la syntaxe la plus rapide.

    L'inconvénient de la concaténation est qu'elle produit une nouvelle chaîne de caractères en mémoire, mais il n'y a qu'un seul "appel" à echo.
    Alors que la syntaxe utilisant la virgule va fermer et rouvrir le flux à chaque fois, ce qui équivaut à "appeler" plusieurs fois echo. Au final ça consomme beaucoup plus de ressources.
    Fais des tests, avec un grand nombre d'itérations utilisant les deux formes d'echo, tu verras


    Bon, je rebondis sur le sujet du topic pour poser à mon tour une question :
    Est-ce qu'utiliser à plusieurs reprises les balises <?php ... ?> dans un même script a une incidence sur le temps d'exécution (je demande par là si ça ralentit l'interpréteur de fermer la balise php pour la rouvrir plus loin) ?

    Merci

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 347
    Points : 136
    Points
    136
    Par défaut ok
    Bon, je rebondis sur le sujet du topic pour poser à mon tour une question :
    Est-ce qu'utiliser à plusieurs reprises les balises <?php ... ?> dans un même script a une incidence sur le temps d'exécution (je demande par là si ça ralentit l'interpréteur de fermer la balise php pour la rouvrir plus loin) ?

    Merci
    ça me rappelle une autre interrogation

    est-ce que ceci dans test.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?PHP
    echo "<html><body><table>";
    for ($i=0;$i++;$i<1000)
          {
          echo "<tr><td>ligne $i de tableau </td></tr>";
          }
     
    echo "</table></body></html>";
    ?>
    est plus rapide que ceci dans test2.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <html><body><table>
    <?PHP for ($i=0;$i++;$i<1000) { ?>
    <tr><td>ligne <?PHP echo $i;?> de tableau </td></tr>
    <?PHP } ?>
    </table></body></html>

    alors ? est-ce qu'un appel de balise PHP est plus gourmand en performance que 2000 appels ? Je parle biensur dans le cadre d'un grand nombre de boucle s.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    Citation Envoyé par Haze.
    Non, il me semble que la syntaxe guillemets simples + concaténation est bien la syntaxe la plus rapide.

    L'inconvénient de la concaténation est qu'elle produit une nouvelle chaîne de caractères en mémoire, mais il n'y a qu'un seul "appel" à echo.
    Alors que la syntaxe utilisant la virgule va fermer et rouvrir le flux à chaque fois, ce qui équivaut à "appeler" plusieurs fois echo. Au final ça consomme beaucoup plus de ressources.
    Fais des tests, avec un grand nombre d'itérations utilisant les deux formes d'echo, tu verras
    Pas d'accord : je viens de faire le test avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function microtime_float() 
    	{  
    	list($usec, $sec) = explode(" ", microtime());
    	return ((float)$usec + (float)$sec);
    	}
    $t1 = microtime_float();
    for ($i=0; $i<1000000; $i++) echo 'a', 'b', ' ';
    $t2 = microtime_float();
    echo $t2-$t1;
    $t1 = microtime_float();
    for ($i=0; $i<1000000; $i++) echo 'c'. 'd'. ' ';
    $t2 = microtime_float();
    echo $t2-$t1;
    la première solution avec les virgules a pris 0.5300 sec, la seconde avec concaténation a pris 0.6294 s, soit 20% de temps en plus (bon c'est toujours moins d'une seconde...)

  7. #7
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    @ francis m :
    Hum, j'ai copié collé ton script sans le modifier, et j'obtiens 8,19 secondes pour la syntaxe utilisant les virgules, et seulement 3.17 secondes pour la concaténation, qui est donc plus de deux fois et demi plus rapide.

    Et je trouve tes chiffres étonnamment courts : tu exécutes 2 millions d'itérations en 1.15 secondes ?!

    De plus, les tutoriels vantant les mérites de la concaténation avec echo sont beaucoup plus récurrents que ceux prônant l'emploi des virgules, je ne crois pas que ce soit une coïncidence .

    @ USA Mike :
    Déjà utilise des apostrophes au lieu des guillemets, car PHP en vas pas aller à la recherche de variables éventuellement contenues dans la chaîne.
    Personnellement, ce qui me semble le plus optimisé est :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <html><body><table>
    <?PHP
    for ($i=0;$i++;$i<1000) {
        echo '<tr><td>ligne '.$i.' de tableau</tr></td>';
    }
    ?>
    </table></body></html>

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    @haze

    je viens de tester à nouveau et je confirme mes chiffres : 0.5233s respectivement 0.6258s pour 1 million d'itérations avec virgule respectivement avec concaténation
    et pour 10 millions d'itérations c'est 5.42 s respectivement 6.41 s

    bien sûr je ne mets pas tes chiffres en doute

    donc cela dépend visiblement de la vitesse du processeur et de la mémoire utilisée

    j'ai cependant vu de nombreux tutoriels vantant les virgules

    les temps que nous obtenons chacun prouvent sans doute qu'il n'y a pas de science exacte à ce sujet

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 69
    Points : 80
    Points
    80
    Par défaut
    personnellement, tous mes test (depuis longtemps déjà) on montré qu'il vallait mieux utiliser des virgules, cela dit, je ne les ait pas fait sous windows... ça serait peut-être interessant.

    par contre, si je met les echo apres ob_start() la concatenation est plus rapide que la virgule, mais le tout est beaucoup plus rapide que sans ob_start.

    la différence des résultat dépends peut-être de la configuration de "output_buffering" dans php.ini

  10. #10
    Membre averti

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Points : 319
    Points
    319
    Par défaut
    Je pense que la différence entre
    et
    ne survient que pour la création d'une variable supplémentaire par le parser pour créer indirectement la chaîne résultante de la concaténation.

    Car ce code
    n'est qu'une version simplifiée de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo 'a';
    echo 'b';
    echo 'c';
    ce qui indiquera à PHP de mettre directement le contenu dans son buffer de sortie. Alors que la concaténation d'une chaîne de caractère nécessitera une variable supplémentaire par concaténation pour recevoir les données à concaténés que PHP ajoutera à son buffer à la fin de l'assemblage.
    Un peu comme ceci:
    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
     
    $name = 'Jean';
    $sentence = 'Bonjour monsieur ';
    $string = $sentence.$name;
    echo $string;
     
    //Devrait etre aussi rapide que :
    $name = 'Jean';
    echo 'Bonjour monsieur '.$name;
     
    //Mais toujours plus rapide que
    echo "Bonjour monsieur $name";
     
    //Le plus rapide :
    echo 'Bonjour monsieur ';
    echo $name;
     
    //Ou aussi
    echo 'Bonjour monsieur', $name;

    Donc pour un gain maximum il faudrai écrire des ECHOs avec guillemets simple sans aucune concaténation, ce que fait (je pense) le parser PHP entre chaque fin de code ( ?> ) et début de code ( <?php ) pour implanter tout le code html écrit directement. Donc on pourrai très bien faire des pages web générées complètement en PHP sans perte de vitesse je pense ^^, le seul moyen d'aller plus vite serait de l'HTML pur sans appeller apache .

    P.S. : Pour répondre à la question du topic, un echo ou écriture HTML direct reviens au même si ta page passe par apache comme expliquer ci dessus apache mettera lui même le contenu qui n'est pas du PHP dans son buffer de sortie.

Discussions similaires

  1. qu'est-ce qui est plus rapide, une test = ou un != ?
    Par clavier12AZQSWX dans le forum Général Python
    Réponses: 5
    Dernier message: 16/08/2012, 15h46
  2. Réponses: 5
    Dernier message: 20/02/2010, 19h36
  3. Qu'est ce qui est le plus rapide
    Par Haku64 dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 13/02/2010, 12h08
  4. Réponses: 16
    Dernier message: 19/05/2005, 16h20
  5. [FB1.5]Quelle est la requete la plus rapide ?
    Par Sitting Bull dans le forum SQL
    Réponses: 4
    Dernier message: 10/12/2004, 13h46

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