|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre Expert
![]() ![]() Mathieu ROBINDéveloppeur Web Inscription : mai 2006 Messages : 1 116 ![]() |
Bonjour, j'ai fait un test dont le résultat me turlupine ce weekend:
afficher un million de fois une chaîne avec une variable dedans. Une première fois avec echo, le script s'est exécuté en 176 secondes, de mémoire. J'ai refait la même en virant le echo et en mettant un sprintf, ça a travaillé 3 secondes. Je l'ai relancé plusieurs fois croyant que j'avais rêvé, mais toujours le même résultat. Qu'est-ce qui explique une telle différence? Merci d'avance à tous les avis
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne. Le bouton ne masse pas les pieds, mais ça aide la communauté.
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
Bonjour,
sans le code, difficile de te répondre. car cela devrait être l'inverse... echo est une pseudo fonction qui ne fait qu'afficher une chaine de caractères. Elle ne peut pas renvoyer une valeur en retour, car ce n'est pas vraiment une fonction... sprintf est une vraie fonction, elle permet beaucoup plus de souplesse car elle gère le format de sortie et permet une valeur en retour. L' inconvénient par rapport a echo est évident : elle est bien plus lente à afficher le résultat... Après, cela dépend aussi de la bride de code les exploitant. Je crois savoir qu'une série de concaténation peut finir par ralentir le echo, mais cela reste à confirmer...
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : mai 2010 Messages : 5 ![]() |
Bonjour.
Je suis du même avis que ska_root, le comportement devrait être l'inverse (bien que 174 secondes soient très long quand même) Par contre, il faut aussi prendre en compte le cache. Je ne sais pas ce qui entoure ton script, mais lors du test avec echo, il y a peut être eu des images, ou autres fichiers à charger, puis lors du test avec sprintf, il les a gardé en cache, ce qui a augmenté les performances à l'affichage |
|
|
00
|
|
|
#4 | ||||
|
Membre Expert
![]() ![]() Mathieu ROBINDéveloppeur Web Inscription : mai 2006 Messages : 1 116 ![]() |
Pas d'histoire de mise en cache ou autre, les codes sont hyper basiques.
Le code avec echo: Code :
Le code avec printf (autant pour moi, je bossais sur un truc avec sprintf et je me suis mélangé) Code :
Je devais être fatigué l'autre soir, j'ai redéroulé les tests plusieurs fois là et toujours les résultats que je vous mets là. M'enfin si j'ai bien compris, echo aurait dû être plus lente. C'est ça?
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne. Le bouton ne masse pas les pieds, mais ça aide la communauté.
|
||||
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Mathieu ROBINDéveloppeur Web Inscription : mai 2006 Messages : 1 116 ![]() |
Ah au fait, je travaille sur un Windows 7 avec un wamp configuration standarde avec juste ça et notepad++ qui tourne quand je lance les tests. je redémarre le navigateur avec vidage de cache et tout le toutim entre les 2
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne. Le bouton ne masse pas les pieds, mais ça aide la communauté.
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
Mes comparaisons sont-elles valables ?
non, car encore une fois, printf comme sprintf() renvoie une valeur (il ne sont pas void) et ce renvoie de valeur coûte plus cher à l'interpréteur en terme de performance. De plus comme l'indique la lettre "f" à la fin qui signifie une extension sur les formats, les 2 fonctions permettent une gestion plus strict en n'acceptant que le type déclaré dans le pattern : "mon test affiche %d" attend un integer en input ou plus souple en précisant le format texte : "mon test affiche %1.2f" sort un float arrondi à 2 chiffres. Si tu veux vraiment le faire, utilise plutôt print(). PHP plus rapide que ton code ? oui, utilises microtime() à la place de time()... Ca vaut le coup ? Pour moi, ce sont des économies de bout de chandelle, il existe de bien plus important secteur d'optimisation à appronfondir dans un code, des erreurs toutes simples que l'on comme t à chaque fois... Mais cela reste mon avis...
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
|
|
00
|
|
|
#7 | |
|
Membre Expert
![]() ![]() Mathieu ROBINDéveloppeur Web Inscription : mai 2006 Messages : 1 116 ![]() |
Citation:
Je vais modifier le test avec microtime et print. Je veux pousser le truc jusqu'au bout, pas pour avoir un vrai gain dans mes applis, mais pour comprendre les fonctions de code que j'utilisent dans leurs moindres détails.
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne. Le bouton ne masse pas les pieds, mais ça aide la communauté.
|
|
|
00
|
|
|
#8 | |
|
Membre Expert
![]() Développeur informatique Inscription : août 2005 Messages : 1 179 ![]() |
Citation:
Comme tu veux. Je crois que le plus important, c'est de retenir que ces fonctions qui amènent au même résultat (affichage en l'occurence) existent toutes encore, pas seulement pour des affaires de portabilité/compatibilité, mais aussi parce qu'elles ont chacune des possibilités différentes. Le tout, c'est d'utiliser celle qui correspond le mieux à son besoin... bonne programmation
__________________
http://cdemarche.developpez.com/ Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com