optimisation : echo ou html - PHP - Programmation
Marsh Posté le 23-11-2005 à 17:30:32
il vaut mieux
Code :
|
que
Code :
|
après pour le reste je ne sais pas, tu peux faire un benchmark
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 ?
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
Marsh Posté le 23-11-2005 à 19:02:41
La virgule c'est justement pas une concatenation
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
Marsh Posté le 23-11-2005 à 19:03:06
ok trouvé
Code :
|
edit: enfin non, c'est pas très clair.
je comprends pas le premier echo
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.
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
C'est a dire ? faut quand meme un echo qq part ? non ?
Marsh Posté le 23-11-2005 à 19:14:51
art_dupond a écrit : ok trouvé
|
"." 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.
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
Marsh Posté le 23-11-2005 à 19:34:22
soju a écrit : dans ce cas là non, ça affiche 4 |
Ah ouais, je pige pas la logique là par contre
mais
echo "2 + 2 = " . (2+2); |
fait bien ce que je lui demande
De même que
echo "2 + 2 = " . 4; |
Quelqu'un peut m'expliquer le comportement de la chaîne initiale
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.
Marsh Posté le 23-11-2005 à 19:39:11
masklinn a écrit : Quelqu'un peut m'expliquer le comportement de la chaîne initiale |
oui j'ai eu du mal à comprendre aussi
voir explication dans mon précédent post que j'ai édité
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 :
|
ça aussi ça passe par l'interpréteur php
Marsh Posté le 23-11-2005 à 19:54:57
soju a écrit : dans ce cas là non, ça affiche 4 |
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. |
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 :
|
que
Code :
|
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:
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.
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
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
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 |
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...
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
Mais bon
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 ... )
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
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.
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. |
on est bien d'accord
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) |
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?
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.
Marsh Posté le 24-11-2005 à 11:52:39
Oki.
Pour le benchs apache, Il faudrait le faire sur des milliers d'iterations.
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 :
Par
Etendre cet exemple a un site tout entier bien sur...
Merci de vos reflexions.
Message édité par fabs2b le 23-11-2005 à 17:26:22