optimisation : echo ou html

optimisation : echo ou html - PHP - Programmation

Marsh Posté le 23-11-2005 à 17:26:00    

Bonjour, je me demande si il vaut mieux faire des echo ou du code html si c'est possible.
La reponse semble evidente, mais je voudrais savoir si quelqu'un a reellement tester cela et si le gain de l'execution de la page est vraiment sigificant.
 
En gros remplacer ceci :

Code :
  1. echo '<a href="'.$url.'">lien</a>';


Par  

Code :
  1. <a href="<?=$url;?>">lien</a>


 
Etendre cet exemple a un site tout entier bien sur...
Merci de vos reflexions.

Message cité 1 fois
Message édité par fabs2b le 23-11-2005 à 17:26:22
Reply

Marsh Posté le 23-11-2005 à 17:26:00   

Reply

Marsh Posté le 23-11-2005 à 17:30:32    

il vaut mieux

Code :
  1. echo '<a href="',$url,'">lien</a>';

que

Code :
  1. echo '<a href="'.$url.'">lien</a>';


 
après pour le reste je ne sais pas, tu peux faire un benchmark

Reply

Marsh Posté le 23-11-2005 à 17:37:30    

Je vois pas trop de differences entre les deux codes....  :pt1cable:

Reply

Marsh Posté le 23-11-2005 à 17:37:57    

concaténation avec , au lieu de .


---------------
D3
Reply

Marsh Posté le 23-11-2005 à 18:09:40    

ah ben oui, j'ai lu trop vite.
Oui l'histoire de la virgule je connaissais, je vais faire un bench pour voir ca
Et pour les echo ?

Reply

Marsh Posté le 23-11-2005 à 19:01:21    

youp,
 
 
c'est quo l'histoire des virgules ?
 
http://www.google.fr/search?hl=fr& [...] ogle&meta= ne donne rien :whistle:

Reply

Marsh Posté le 23-11-2005 à 19:02:41    

La virgule c'est justement pas une concatenation :o
 
Parcontre pour le echo ou <?=$var;?> a mon avi c'est kif kif mais faudrait voir avec un bench... A noter que le problème ne se pose pas si on fait une separation des couches


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 23-11-2005 à 19:03:06    

ok trouvé :ange:  
 
 

Code :
  1. <?php
  2. echo "2 + 2 = " . 2+2; // This will print 4
  3. echo "2 + 2 = " , 2+2; // This will print 2+2 = 4
  4. ?>


 
 
edit: enfin non, c'est pas très clair.
 
je comprends pas le premier echo :cry:

Message cité 1 fois
Message édité par art_dupond le 23-11-2005 à 19:04:32
Reply

Marsh Posté le 23-11-2005 à 19:12:01    

en gros, un echo avec des "." dit "je rajoute le premier au second (et ainsi de suite) et  j'envois ensuite le résultat une fois la chaine ou le nombre calculé"
un echo avec des "," dira j'envois chaque élément l'un aprés l'autre sans créer de chaine intermédiaire.
On gagne donc du temps dans le second cas vu qu'on demande moins de boulot à php.

Reply

Marsh Posté le 23-11-2005 à 19:12:13    

esox_ch a écrit :

A noter que le problème ne se pose pas si on fait une separation des couches


 
Separation des couches  :pt1cable:  
C'est a dire ? faut quand meme un echo qq part ? non ?


Message édité par fabs2b le 23-11-2005 à 19:12:40
Reply

Marsh Posté le 23-11-2005 à 19:12:13   

Reply

Marsh Posté le 23-11-2005 à 19:14:51    

art_dupond a écrit :

ok trouvé :ange:  
 
 

Code :
  1. <?php
  2. echo "2 + 2 = " . 2+2; // This will print 4
  3. echo "2 + 2 = " , 2+2; // This will print 2+2 = 4
  4. ?>


 
 
edit: enfin non, c'est pas très clair.
 
je comprends pas le premier echo :cry:


"." va créer la chaîne "2+2=", va créer la chaîne "4" (2+2 transformé en string), puis va créer la chaîne "2+2=4" (par concaténiation) qui va être envoyée à echo.
 
"," va créer la chaîne "2+2=", va créer l'entier 4 (2+2) et va envoyer les deux à echo
 
=> avec la 2e méthode, on évite la création d'une à deux chaînes de caractères, donc on gagne légèrement en vitesse d'exécution.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 23-11-2005 à 19:28:04    

masklinn a écrit :

"." va créer la chaîne "2+2=", va créer la chaîne "4" (2+2 transformé en string), puis va créer la chaîne "2+2=4" (par concaténiation) qui va être envoyée à echo.

dans ce cas là non, ça affiche 4
 
EDIT : en fait il concatène puis fais l'addition
1) '2+2=' . 2 = '2+2=2'
2) '2+2=2' + 2 = 4
ça donne 4 car intval('2+2=2')=2
 
 

Message cité 2 fois
Message édité par soju le 23-11-2005 à 19:37:31
Reply

Marsh Posté le 23-11-2005 à 19:34:22    

soju a écrit :

dans ce cas là non, ça affiche 4


[:petrus75]
 
Ah ouais, je pige pas la logique là par contre [:petrus75]
mais

echo "2 + 2 = " . (2+2);


fait bien ce que je lui demande [:petrus75]
De même que

echo "2 + 2 = " . 4;


Quelqu'un peut m'expliquer le comportement de la chaîne initiale [:petrus dei]

Message cité 1 fois
Message édité par masklinn le 23-11-2005 à 19:35:27

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 23-11-2005 à 19:39:02    

Pour répondre à la première question, l'HTML est préférable pour la simple et bonne raison que même un echo aussi ridicule soit-il passera par l'interpréteur PHP.
Le gain doit être ridicule, mais bon.

Reply

Marsh Posté le 23-11-2005 à 19:39:11    

masklinn a écrit :

Quelqu'un peut m'expliquer le comportement de la chaîne initiale [:petrus dei]

oui j'ai eu du mal à comprendre aussi [:petrus dei]
voir explication dans mon précédent post que j'ai édité  :)  

Reply

Marsh Posté le 23-11-2005 à 19:48:08    

The-Shadow a écrit :

un echo aussi ridicule soit-il passera par l'interpréteur PHP

fabs2b a écrit :

Code :
  1. <a href="<?=$url;?>">lien</a>


ça aussi ça passe par l'interpréteur php  
 
 
 

Reply

Marsh Posté le 23-11-2005 à 19:54:57    

soju a écrit :

dans ce cas là non, ça affiche 4
 
EDIT : en fait il concatène puis fais l'addition
1) '2+2=' . 2 = '2+2=2'
2) '2+2=2' + 2 = 4
ça donne 4 car intval('2+2=2')=2


[:mlc]
 
[:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 23-11-2005 à 20:00:01    


http://fr.php.net/manual/fr/langua [...] ggling.php
http://fr.php.net/manual/fr/langua [...] conversion

Citation :

Le transtypage n'a pas toujours un résultat prévisible lors du transtypage entre certains types.

Reply

Marsh Posté le 23-11-2005 à 20:08:30    

soju a écrit :

ça aussi ça passe par l'interpréteur php


Seulement le petit bout entre les balises PHP.
Il vaut mieux :

Code :
  1. <img src="<?php echo $monimage; ?>" alt="Texte alternatif à mon image" width="250" height="300" title="ouah mon tooltip" />


que

Code :
  1. echo '<img src="',$monimage,'" alt="Texte alternatif à mon image" width="250" height="300" title="ouah mon tooltip" />';


 

Reply

Marsh Posté le 23-11-2005 à 20:15:53    

The-Shadow a écrit :

Seulement le petit bout entre les balises PHP.


Hum, je ne sais pas exactement comment se comporte l'interpréteur PHP, mais les JSP comme les mods (mod_perl et mod_python) fonctionnent comme ça:

  • On transforme l'intégralité du fichier en code
  • On passe le tout à travers l'interpréteur
  • On balance la sortie de l'interpréteur au serveur web


Donc un code du style

Ceci est un <%=test%>


Est transformé en

print "Ceci est un"+test


(ou un truc du style, après ça dépend des langages)
 
Je fais 2-3 recherches, mais je suis pas sûr que PHP soit très différent.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 23-11-2005 à 23:16:31    

Au delà de gagner un poil de cul de millième de sconde, c'est illisible les echo à tout va ou les tags php paumés dans un code html ;)

Reply

Marsh Posté le 23-11-2005 à 23:18:55    

leflos5 a écrit :

Au delà de gagner un poil de cul de millième de sconde, c'est illisible les echo à tout va ou les tags php paumés dans un code html ;)


Tout éditeur syntaxique de qualité est capable de reconnaître et de colorer de manière spécifique un contenu situé entre "<%= %>" ou "<?= ?>", et donc de le rendre extrèmement lisible au sein d'un source HTML brut [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 24-11-2005 à 00:01:58    

masklinn a écrit :

Tout éditeur syntaxique de qualité est capable de reconnaître et de colorer de manière spécifique un contenu situé entre "<%= %>" ou "<?= ?>", et donc de le rendre extrèmement lisible au sein d'un source HTML brut [:spamafote]


C'est pas plus clair pour autant ;) Les pages html avec du php tous les 6 mots c'est illisible, surchargé en <?
C'est pas de repérer le php, c'est la lisibité générale du truc ;)
 
Je trouve ça stupide sur le principe de conception surtout...

Reply

Marsh Posté le 24-11-2005 à 00:28:44    

Je ne vois pas où j'ai parlé de "mettre du PHP tous les 6 mots" dans mes posts [:pingouino]
 
Mais bon [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 24-11-2005 à 00:29:51    

euh, php met vraiment le . avec une précédence supérieure au + ? :s
( si y'a une raison valable qu'on m'explique, au premier abord j'ai un peu du mal ... )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 24-11-2005 à 00:31:09    

0x90 a écrit :

euh, php met vraiment le . avec une précédence supérieure au + ? :s


Il semblerait, l'explication de soju colle parfaitement avec les résultats des expériences [:sisicaivrai]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 24-11-2005 à 10:54:13    

leflos5 a écrit :

Au delà de gagner un poil de cul de millième de sconde, c'est illisible les echo à tout va ou les tags php paumés dans un code html ;)


 
Je pense aussi qu'il y a beaucoup mieux à faire comme optimisation que jouer avec un echo. Et je ne suis pas convaincu par le l'usage de ',' à la palce de '.'. Au final la chaine est bien concatenée qq part. Si ce n'est pas PHP qui le fait ce sera un autre. Par contre, c'est sur le script PHP sera plus 'rapide'. Mais ca prendre plus de temps chez l'autre.
 
Y'a d'autres optimisations à faire avant de se pencher là-dessus. :ange:


---------------
MZP est de retour
Reply

Marsh Posté le 24-11-2005 à 11:08:13    

cinocks a écrit :

Et je ne suis pas convaincu par le l'usage de ',' à la palce de '.'. Au final la chaine est bien concatenée qq part.

non, la chaine n'est pas concaténée, il suffit de faire un bench pour s'en convaincre (en moyenne 2 fois plus rapide avec des chaines de petite taille)

cinocks a écrit :

Y'a d'autres optimisations à faire avant de se pencher là-dessus. :ange:

on est bien d'accord  :)  

Reply

Marsh Posté le 24-11-2005 à 11:32:14    

soju a écrit :

non, la chaine n'est pas concaténée, il suffit de faire un bench pour s'en convaincre (en moyenne 2 fois plus rapide avec des chaines de petite taille)
on est bien d'accord  :)


 
ai-je dis que la concatenation etait faite par PHP? ;) Le bench mesure l'execution du PHP. Il ne prend en compte l'ensemble de la chaine.
 
D'ailleurs je me souviens d'un site ayant fait des benchs. Quelle etait l'adresse?


---------------
MZP est de retour
Reply

Marsh Posté le 24-11-2005 à 11:44:08    

Certe la cocaténation ne sera pas faite par php, mais ca évitera à php de créer une chaine de caractére intermédiaire, opération demandant un certain nombre de ressources systémes (allocation/désalocation de mémoire et copie des données dans la chaien plus grande) alors qu'apache dispose surement de bloc mémoire où stocker ça sans avoir besoin de faire une partie de ces étapes. En plus apache, n'a besoin de gérer qu'un seul pointeur pour écrire ces données en mémoire alors que php risque d'en utiliser plusieurs si les différentes étapes de la création de la chaine nécessitent une zone plus grande que prévus.
 
Enfin bref, c'est vrai que la différence ne sera pas resentis par le visiteur et que c'est pas par là qu'il faut commencer les optimisations. Mais si on commence à peine un gros programme php, ca peut valoir le coup de prendre cette habitude dés le début.
 
PS : Le mieux serait d'utiliser le bench apache, comme ça, on poura voir si on gagne du temps au final ou pas.

Reply

Marsh Posté le 24-11-2005 à 11:52:39    

Oki.
 
Pour le benchs apache, Il faudrait le faire sur des milliers d'iterations.


---------------
MZP est de retour
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed