IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Différences de perfos entre sprintf et echo


Sujet :

Langage PHP

  1. #1
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 162
    Points : 2 015
    Points
    2 015
    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
    Comparez la qualité et le prix du matériel de bricolage ou de maison avant d'acheter : MatosMaison
    Le bouton ne masse pas les pieds, mais ça aide la communauté.

  2. #2
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    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...



  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    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

  4. #4
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 162
    Points : 2 015
    Points
    2 015
    Par défaut
    Pas d'histoire de mise en cache ou autre, les codes sont hyper basiques.

    Le code avec echo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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?
    Comparez la qualité et le prix du matériel de bricolage ou de maison avant d'acheter : MatosMaison
    Le bouton ne masse pas les pieds, mais ça aide la communauté.

  5. #5
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 162
    Points : 2 015
    Points
    2 015
    Par défaut
    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
    Comparez la qualité et le prix du matériel de bricolage ou de maison avant d'acheter : MatosMaison
    Le bouton ne masse pas les pieds, mais ça aide la communauté.

  6. #6
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    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...

  7. #7
    Membre chevronné
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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 162
    Points : 2 015
    Points
    2 015
    Par défaut
    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.
    Comparez la qualité et le prix du matériel de bricolage ou de maison avant d'acheter : MatosMaison
    Le bouton ne masse pas les pieds, mais ça aide la communauté.

  8. #8
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence(s) JDK entre IBM et Sun ?
    Par g_rare dans le forum Langage
    Réponses: 9
    Dernier message: 05/05/2006, 12h16
  2. API qui donne la différence des données entre 2 classes ?
    Par elitost dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 18/04/2006, 11h07
  3. Réponses: 6
    Dernier message: 06/12/2005, 16h51
  4. [Rave] Différence de langue entre exécution et design
    Par RamDevTeam dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/11/2005, 11h49
  5. Différences d'affichage entre IE et FF
    Par Tot-O dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/09/2005, 18h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo