JeuWeb - Crée ton jeu par navigateur
Lisibilité ou performances ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Lisibilité ou performances ? (/showthread.php?tid=4055)

Pages : 1 2


Lisibilité ou performances ? - Sephi-Chan - 10-06-2009

(10-06-2009, 05:35 PM)Argorate a écrit : -Sinon ouvrir et fermer php vous fait perdre du temps d'exec (même si c'est peu), pourquoi ne pas utiliser echo '...' sans jamais refermer/rouvrir PHP?

Parce que ça fait perdre en lisibilité. En utilisant PHP comme moteur de template, on conserve de la lisibilité quand on intègres du PHP dans du HTML.


<html>
<head>
<title><?= $data['title'] ?></title>
</head>
<body>
<div class="articles">
<? foreach($data['articles'] as $article): ?>
<div class="article">
<h3><?= $article['title'] ?></h3>
<p><?= $article['content'] ?></p>
</div>
<? endforeach; ?>
</div>
</body>
</html>

Imagine ce que ce code donnerait sans fermeture/ouverture des balises… Smile

Notez que l'on peut, avec PHPHaml, améliorer encore plus la lisibilité du code (et produire une sortie HTML parfaite en terme de syntaxe et d'indentation).

Code :
%html
  %head
    %title= $data['title']
  
  %body
    .articles
      - foreach($data['articles'] as $article)
        .article
          %h3= $article['title']
          %p= $article['content']


Sephi-Chan


RE: Horaires - MdE - 10-06-2009

[HS] C'est vrai que je me suis posé cette question en terme de rapidité d'exécution s'il fallait mieux fermé et rouvrir les balises Php ou s'il fallait mieux mettre un echo. Notamment quand l'echo contient des variables. Après, en terme de lisibilité, c'est vrai qu'un echo de 5 lignes c'est pas génial.[/HS]


RE: Horaires - Sephi-Chan - 10-06-2009

La lisibilité et la maintenabilité du code doit l'emporter sur les performances. Grappiller quelques millisecondes grâce à la syntaxe du code n'est jamais une bonne idée quand ça diminue la lisibilité.

Cela est d'autant plus vrai dans un tel cas où la différence en terme de performances est presque nulle alors que la différence en terme de lisibilité est énorme. Mieux vaut éviter les echo à rallonge.

Les guillemets simples sont plus rapides, mais moins lisibles.

$nourriture = "jambon fumé";
echo 'Moi j\'aime le ' . $nourriture . ' !';
echo "Moi j'aime le $nourriture !";

Prenons maintenant l'exemple d'une vraie application avec un bout de code qui générera le code HTML suivant :


<p>Robert travaille sur 2 projets.</p>
<ul>
<li><a href="projects/27">Jambon fumé</a></li>
<li><a href="projects/31">Pâté en croûte</a></li>
</ul>

Avec des guillemets simples et des balises HTML affichées par echo :

echo '<p>' . $user->username . ' travaille sur ' . count($projects) . ' projets.</p>';
echo '<ul>';
foreach($projects as $project){
echo '<li><a href="projects/'. $project['id'] .'">' . $project['title'] . '</a></li>';
}
echo '</ul>';

Avec des guillemets doubles et des balises HTML affichées par echo :

echo "<p>{$user->username} travaille sur " . count($projects) . ' projets.</p>';
echo '<ul>';
foreach($projects as $project){
echo "<li><a href='projects/{$project['id']}'>{$project['title']}</a></li>";
}
echo '</ul>';

Façon moteur de template :

<p><?= $user->username ?> travaille sur <?= count($projects) ?> projets.</p>
<ul>
<?php foreach($projects as $project): ?>
<li><a href="projects/<?= $project['id'] ?>"><?= $project['title'] ?></a></li>
<?php endforeach; ?>
</ul>

Il faut faire son choix. Quand je développais en PHP, j'utilisais la dernière solution, qui se révèle bien plus clair sur une grande page et plus facile à maintenir pour un intégrateur HTML qui aurait vite tout cassé avec les deux premières notations. Smile

Depuis quelques mois, je suis passé à Ruby on Rails et Haml, et voilà ce que ça donne :

%p== #{@user.username} travaille sur #{@user.projects.length} projets.</p>
%ul
- for project in @user.projects
%li= link_to project


Sephi-Chan


RE: Lisibilité ou performances ? - MdE - 10-06-2009

Mais la lisibilité n'est elle pas une question d'habitude ? En tout cas, quand on est le seul à voir son code. Si une personne est habituée à voir des echo' '; sachant en plus que de cette manière, il peut mettre des html classique à l'intérieur (echo '<a href="">aaa</a>'Wink.
Bon après c'est vrai que les logiciels qui normalement colorent les balises etc...; de cette façon, la coloration ne se fait pas mais je ne suis pas habitué car je fais tout sous block-note (je suis maso ^^).
Enfin tout ça pour dire que c'est surtout une question d'habitude et qu'il n'y a pas LA façon de bien faire.


RE: Lisibilité ou performances ? - Sephi-Chan - 10-06-2009

Comme tu le dis, tu es seul à lire ton code. Mais même ainsi, tu te rends bien compte qu'il y a des notations imbuvables (généralement quand le code est truffé de ' \' ').

Mais dès que tu vas commencer à montrer un peu de code : si tu écris un cours, si tu aides un ami, etc. Tu vas vite te rendre compte que les gens ont du mal à te lire.

Effectivement, il n'y a pas la manière parfaite de faire, mais il y en a de meilleures que d'autres. Il faut s'adapter.


Sephi-Chan


RE: Lisibilité ou performances ? - MdE - 10-06-2009

Oui, et c'est vrai que personnellement, c'est au cas par cas, des fois je préfère ne pas faire plusieurs <? ?>, des fois c'est l'inverse. Par contre, il est vrai qu'avec la méthode des echo, j'ai souvent des erreurs T_STRING dues à l'oubli d'un \. Mais jusqu'à présent, cela ne m'a pas si embêté que cela.


RE: Lisibilité ou performances ? - Arius Vistoon - 10-06-2009

pour ma par, j'essaye tant que possible de ne rien ouvrir du tout.
je m'explique.

Quand je code mon php, il n'y que du php dans mon code. Quand je code du xhtml, il n'y que du xhtml dans mon code...euh mais comment tu fais pour rendre dynamique le truk me dira t-on (pour certain) ?

je passe par une couche de transformation xsl. comme ca, j'ai ma couche modele/métier (la ou se trouve le sql), ma couche service, ma couche vue, ma couche controleur et ma couche présentation

Ce qui fait que tous mes développement sont lisibles (chacun sa place) et facilement évolutif par quiconque (même celui qui n'est pas le "codeur/dsigner" de base)


RE: Lisibilité ou performances ? - Sephi-Chan - 10-06-2009

Quel est l'intérêt de cette pratique ?

J'ai essayé à une période et ça m'a vite gonflé, ça rajoutait une couche de travail qui au final, ne servait pas à grand chose.
Le seul usage que j'y avais trouvé, c'était pour la mise au point d'un service Web : comme les pages rendaient du XML, on pouvait accéder aux données. Avec Rails, le problème ne se pose plus. :p


Sephi-Chan


RE: Lisibilité ou performances ? - Arius Vistoon - 10-06-2009

l'intérêt est multiple.

si je dis à un codeur xslt fait moi tel écran, il n'a pas besoin de connaître php, java, ruby Wink ou autre, il code en ce qu'il sait faire..xslt
idem pour le php ou le xml (et encore idem pour les couche spécifique qui peuvent très bien être dans différents langages). la seule chose qui compte c'est l'entrée et la sortie, le reste c'est la tambouille du spécialiste de ce domaine.

si demain, j'ajoute une fonctionnalité les répercussions sont localisé et.. contrôlé. C'est encore plus vrai si 'est pour un web services (comme tu l'a cité)

Je vais citer des exemples succincts.

1) Il m'est arrivé de devoir décider de changer le systeme de droit (nous souhaitons avoir une gestion de droit en 4 dimension..la roll royce) des gestion de droits) que j'avais fait pour une application. Nous y avons réfléchit 3 mois (à 3 personnes). et grâce a ce système, on l'a implémenté en 2 semaines (avec 6 personnes).

2) le support client décide (comme chaque souvent), d'ajouter une nll fonctionnalité. Avec ce systèmes, on le fait bien plus rapidement car tout est compartimenté. Il a besoin de changer l'aspect graphique ok, pas besoin de connaître php/java/ruby.. Il a besoin d'ajouter un nouveau champs, pas besoin de connaitre la couche modèle, ce qu'il demande se trouve déjà dans ce que ramène la couche service, il suffit juste de l'afficher...

3) Microsoft (mon ex-employeur depuis peu) m'avait demandé de modifier la couche contrôleur de mon logiciel qu'il jugeait trop "permissif" (hum...) en matière de sécurité web. La maison mère avait estimé le boulot a 6 mois, le directeur technique de la filiale l'avait estimé à 3 mois...je l'ai réalisé en 1 mois. sans cette séparation, ca n'aurait pas était possible en si peu de temps

Autre avantage, les différentes couches sont la suite logique de l'analyse uml faite au préalable (surtout la couche model). Du coup, d'un coup d'oeil, on sait exactement quoi implémenter et comment (et la plupart du temps sans réfléchir..;sisi vous avait bien lu..sans réfléchir). C'est ainsi qu'un stagiaire c'est vus attribuer le fait d'écrire des setter/gette (etc..) en batterie...

Bref, des exemples j'en ai pleins.
Maintenant, tout est relatif. Surtout quand des personnes mettent la pression pour coder (car enjeu monétaire, stratégique etc... sur du cour terme ou tout simplement le codeur débutant) pensent qu'il est plus intéressant de coder que de penser à ce que l'on va codé


RE: Lisibilité ou performances ? - Allwise - 10-06-2009

+1 Sephi.
Même si OK, chacun ses habitudes, faut pas déconner, foutre du html dans un echo, c'est vraiment moche... Entre cette solution et les autres, plus lisibles, y a pas photo. Le gain de temps de la solution barbare est trop insignifiant pour être un argument.

Sinon le XSLT, c'est vrai que ça a un côté pratique. Mais comme tout, faut avoir le temps de s'y mettre et pour l'instant dans mon petit parcours professionnel, je n'ai vu personne l'utiliser.