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 :

Faut-il limiter l'utilisation des "echos"?


Sujet :

Langage PHP

  1. #1
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut Faut-il limiter l'utilisation des "echos"?
    Bonjour à tous,

    j'aimerais savoir si dans un code en PHP5 par exemple il est bien de faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    public function lambda(){
    echo "lignes de HTML";
    quelques traitements php
    echo "lignes de HTML"
    quelques traitements php etc...
    }?>
    Ou bien si il vaut mieux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    public function lambda(){
    ?> lignes de HTML <?php
    quelques traitements php
    ?> 10 lignes de HTML <?php
    quelques traitements php etc...
    }?>
    Ou alors préconisez-vous d'utiliser ob_start(), si j'ai bien compris, ob_start() doit être appelé au début avant le premier echo, et à la fin, on met ob_end_flush() et tout est appelé d'un coup?

    Pourriez-vous me dire lequel est le plus économique en terme de temps et d'optimisation selon vous?

    Merci beaucoup

  2. #2
    Membre confirmé
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Points : 498
    Points
    498
    Par défaut
    Les echo sont pour moi les plus rapides.

    Mais par contre pour le développeur c'est pas top.

    D'après mes tests (en local) :
    Sur 100 paragraphes Lorem Ipsum affiché :
    en HTML pur : environ 2sec
    en PHP avec echo : 0.0001sec

    c'est assez convaincant. Donc privilégier la vitesse ou la modification et compréhension du code aisément c'est à voir.

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    C'est surtout l'utilisation d'HTML dans le PHP qu'il faut limiter.
    Ecrit tout ton code PHP puis en bas de page (par exemple) ecrit l'HTML avec les appels aux fonctions PHP nécessaires.
    L'étape d'après c'est le MVC

  4. #4
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut
    Nowwis, je préfère utiliser les echo on est bien d'accord,

    mais je voulais savoir quelles sont les meilleurs performances, merci pour tes tests

    Oui j'utilise déjà le MVC grunk, mais par contre je n'écrivais aucun HTML, mon HTML je l'ai toujours écrit par des "echos". Comme on a toujours besoin d'inclure des variables php dans notre html, donc moi mon code a toujours été du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<div id="content" class="'.$class_content.'">'.$value.'</div>';
    Mais comme au fil du code, les fichiers deviennent lourds, je voulais savoir si je m'orientais bien vers une solution qui soit correcte en terme de performance sans pour autant être la meilleure.

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Si tu utilise déjà le MVC tu devrais donc avoir des vues.
    pour moi ces vues doivent être en html et contenir quelques touches de php quand nécessaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html>
    [...]
    <div> Bonjour <?= $nom ?></div>
    <div>
    Voici la liste de vos achats : <br />
    <ul>
    <?php
    foreach($achats as $item)
        echo '<li>'.$item.'</li>';
    ?>
    </ul>
    </div>
    </html>

  6. #6
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut
    Non je n'écrit aucun HTML.

    Mon MVC est du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $accueil->displayHeaders($params);
    ...
    $page->displayFooter();
    ça me permet de personnaliser les headers, que ce soit mes css, js, etc... selon la page et sans trop me prendre la tête. Pour éviter de charger des fichiers dont je n'ai pas besoin sur toutes les pages.

  7. #7
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Ouais enfin bon pour le contenu de tes pages faut forcément écrire de l'html à un moment donné.

    Perso les classe qui génère de l'html je suis pas fan , à part avoir un code pas bien joli ça n'apporte pas grand chose.

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par grunk
    Perso les classe qui génère de l'html je suis pas fan , à part avoir un code pas bien joli ça n'apporte pas grand chose.
    +1

    Faut voir le but recherché.
    Si c'est la performance, et rien que la performance, pourquoi pas si c'est réellement le cas en codant ainsi.

    Sinon, il n'y a pas grand intérêt, mais surtout on perd pas mal de chose dans la bataille.
    Admettons qu'on fasse un code comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    echo "
    <div>
        <p>Il était une fois</p>
        <p>$marchand</p>
        <p>qui vendait du foie</truc_pas_correct>
    </div>";
    ?>
    La plupart des éditeurs ou IDE (sinon tous) sont dans l'incapacité de faire une coloration syntaxique correcte, comme ici le HTML et Php.
    $marchand est "noyé" dans une chaine.
    Le code devient alors limite illisible, difficile à déboguer.

    De même que la plupart des débogueurs des éditeurs ou IDE (sinon tous) sont dans l'incapacité de détecter une éventuelle erreur afin de nous l'avertir, comme l'erreur faire faite ici (</truc_pas_correct>).

    Tout cela cumulé peu déboucher sur de grosses pertes de temps pour le codeur/développeur.


    Le but recherché aussi c'est de permettre à des WebDesigners, des non développeurs en général, de modifier (genre relooking) les vues sans se préoccuper des traitements, ce qui diminue les risques aussi.
    Donc une présentation clair du HTML devient essentiel.


    De mon coté j'accorde peu voir aucune importance niveau performance pour les vues.
    A moins de générer des pages contenant des milliers de lignes HTML, peut être.

  9. #9
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut
    Mon code ne ressemble pas à ça RunCodePhp mais plutôt à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    echo '
    	<ul>
    		<li>
    			<img src="'.IMG_PATH.'/plane.jpg" />
    			<a href="#">'.$this->dico['accueil'][4].'</a>
    		</li>
    ...
    Ce qui pour ma part est plus simple à lire que ce genre de code que j'ai déjà trouvé en travaillant avec d'autres développeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ul>
    	<li>
    		<img src="<?php echo IMG_PATH.'/plane.jpg';?>" />
    		<a href="#"><?php echo $this->dico['accueil'][4] ?></a>
    	</li>
    Remarque je ne travaille plus en équipe, mais lorsque je travaillais en parallèle avec d'autres développeurs, j'utilisais les conventions générale qui étaient définies et c'est normal.

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Mon code ne ressemble pas à ça RunCodePhp mais plutôt à ça :
    C'est pour ainsi dire la même chose, à la différence près que tu prends quand même soin d'éviter de "noyer" les variable Php dans la chaine, tu utilise la concaténation.
    Je dirais que c'est un moindre mal.

    Mais tout le code HTML reste néanmoins qu'une chaine, je doute fort qu'un éditeur ou IDE soit capable de détecter une erreur coté HTML la dedans.
    C'est loin d'être un détail, on peu perdre un temps fou dû à une banale erreur de frappe, genre </lu> au lieu de </li>.

    Je reste étonné.
    De mon coté j'utilise NetBeans comme IDE, un simple clic sur une balise (ouvrante ou fermante, peu importe) ça colore les 2 balises.
    Un coup d'oeil suffit pour voir qu'est-ce quelle intègre, quelque soit le nombre de ligne qu'il y a entre.
    Cela donne une vue d'ensemble du code HTML qui me parait hyper pratique, quand bien même que son indentation soit parfaite.
    De même si je fais une erreur de frappe, la balise devient rouge.
    Il n'y a pas plus pratique, la correction se fait dans la seconde qui suit, donc aucune perte de temps.

    Puis n'en parlons pas de l'auto-complétion qu'offre NetBeans, aussi bien sur les balises que sur les attributs, donc moins de saisies, du coup moins de risque d'erreurs, et c'est forcément un gain de temps.

    Personnellement je ne peux pas me passer ce ça.


    Par ailleurs, une autre syntaxe de Php dans ce cas là est possible, et je la voyais très rarement il y quelques années.
    Celle-ci à l'air d'être de plus en plus adoptée.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div>
    <?php if ($toto == 'toto'): ?>
    Salut toto !!
    <?php else: ?>
    Salut
    <?php endif; ?>
    </div>
    Je n'est pas encore adopté cette syntaxe, peut être l'un d'en vous pourrait faire un petit retour sur le ou les avantages quelle apporterait.

  11. #11
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut
    Pour ma part j'ai du mal à adopter cette syntaxe. Question d'habitude.

    Pour le reste je comprends, moi je suis resté sur notepad++. Je ne sais pas comment c'est considéré. J'ai vu des captures d'écran de netbeans. Ce que je peux dire c'est que notepad++ est simple peut être moins lourd, personnalisable avec l'autocompletion aussi.

    Et surtout l'écran est large alors que netbeans semble proposer un certain nombre d'outils qui permettent de gagner du temps, mais qui envahissent un peu trop l'écran et font perdre en visibilité sur le code je trouve. Mais bon je vais le télécharger par curiosité car je sais que beaucoup de développeurs utilisent cet IDE, on verra bien peut être que j'en changerai.

  12. #12
    Membre éprouvé Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Points : 1 275
    Points
    1 275
    Par défaut
    Perso je mets d'un côté le HTML "statique" dans un fichier HTML et j'ajoute des tags aux endroits où j'ai besoin de générer du HTML dynamique.

    Après en php je valorise des variables et j'ai des fonctions toutes faites qui vont remplacer les tags par le contenu de mes variables (une variable par tag).

  13. #13
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 241
    Points
    20 241
    Par défaut
    Citation Envoyé par dev14 Voir le message
    Pour le reste je comprends, moi je suis resté sur notepad++. Je ne sais pas comment c'est considéré.
    Np++ est un excellent éditeur dès que l'on à besoin d'ouvrir un code source et de le modifier rapidement. Pour gérer un projet complet , il est un peu juste en fonctionnalité.

    Citation Envoyé par dev14 Voir le message
    Et surtout l'écran est large alors que netbeans semble proposer un certain nombre d'outils qui permettent de gagner du temps, mais qui envahissent un peu trop l'écran et font perdre en visibilité sur le code je trouve.
    En général on admet qu'une ligne de code ne doit pas dépasser 80 caractères (c'était moins avant). Du coup quelque soit ton éditeur et ta résolution si tu respecte cette "règle" tu peux lire un code sans scroll horizontal quelque soit l'éditeur et la résolution (bon ptet pas du 320*240 ^^ )

    Pour en revenir à ta question initial :

    - Beaucoup d'echo ou un seul gros => ca n'a pas de réelle importance. le jour ou tu aura besoin de ce genre d'optimisation sur ton code n'est pas près d'arriver sauf si tu fait 1M vu / jour.
    Le principal est que tu sois à l'aise dans ce que tu écris tout en gardant à l'esprit qu'un jour peut être quelqu'un d'autre aura à travailler sur ton code.

  14. #14
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2011
    Messages : 354
    Points : 410
    Points
    410
    Par défaut
    Merci beaucoup grunk. J'ai en effet de modestes besoins qui ne nécessitent certainement pas ce type d'optimisation.

    Merci à vous tous pour vos réponses.

  15. #15
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par dev14 Voir le message
    Merci beaucoup grunk. J'ai en effet de modestes besoins qui ne nécessitent certainement pas ce type d'optimisation.
    oui c'est une question très secondaire. En plus cela dépend des cas... donc tu ne pourrais même pas adapter une stratégie définie et t'y tenir. Faudrait faire des bench assez souvent tout au long du code pour voir réellement quelle méthode est la plus rapide. Bref personne ne s'embête avec ça surtout qu'il te faudrait de tes gros pavés de code à afficher pour voir une différence de quelques dixièmes de millisecondes...

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Personnellement, j'utilise les deux syntaxes.

    Et à y réfléchir, cela dépend du contexte :

    Soit je suis dans une Vue donc du html et aussi du css

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ul>
    <li>
    <a href='<?php echo Domaine ?>monlien' class='sousmenu' >monlien</a>
    </li>
    </ul>

    ou dans un générateur de vue en php, où en fait il y a plus de php et donc je vais plus vite à taper

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<a href='".Domaine."monlien' class='sousmenu' >monlien</a>";
    à noter que l'on gagne en code en prenant la première version ( on s'en fout des ' ou " , et aussi <?php echo Domaine ?> est autorisé, pas besoin de ;

    Pour cela par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div>
    <?php if ($toto == 'toto'): ?>
    Salut toto !!
    <?php else: ?>
    Salut
    <?php endif; ?>
    </div>
    Je ne connais pas, mais dans le nouveau php, il y a des sortes de breakers(zut je trouve plus les liens de la doc) style

    IF>>>


    ENDIF>>>

    qui permettent aux personnes habitués aux langages comme C par exemple de se servir de php avec des références de langage communs.

    Aussi gestion des namespace...

    A voir si cela sera productif avec nos vielles logiques, et avec l'institutionnalisation des try - catch ( foreach )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faut-il que j'utilise des threads ?
    Par djiga4me dans le forum Langage
    Réponses: 5
    Dernier message: 29/12/2009, 01h36
  2. Requête SELECT : limite d'utilisation des index
    Par DadaWeb dans le forum Requêtes
    Réponses: 7
    Dernier message: 07/12/2005, 22h24

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