Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/01/2011, 11h27   #1
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Par défaut Différences de perfos entre sprintf et echo

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é.
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 12h13   #2
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
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...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 16h14   #3
Invité de passage
 
Inscription : mai 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 5
Points : 1
Points : 1
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
Kenshin_Himura est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 19h59   #4
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Pas d'histoire de mise en cache ou autre, les codes sont hyper basiques.

Le code avec echo:
Code :
1
2
3
4
5
6
<?php
echo time().'<br>';
for($i=0;$i<1000000;$i++)
	echo 'Ceci est une phrase de test';
echo '<br>'.time();
?>
Résultat: 2 secondes

Le code avec printf (autant pour moi, je bossais sur un truc avec sprintf et je me suis mélangé)
Code :
1
2
3
4
5
6
7
<?php
echo time().'<br>';
$variable = 4;
for($i=0;$i<1000000;$i++)
	printf('Il y a %d faces sur un de.', 6);
echo '<br>'.time();
?>
Résultat: 2 secondes aussi

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é.
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 20h02   #5
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
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é.
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 20h28   #6
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
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...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 20h39   #7
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Citation:
Envoyé par ska_root Voir le message
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...
Effectivement, je chipote, mais j'avais envie de savoir. Par contre, j'ai pas compris la fin de ta phrase.

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é.
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 22h34   #8
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Citation:
des erreurs toutes simples que l'on commet à chaque fois


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...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h59.


 
 
 
 
Partenaires

Hébergement Web