2010-06-05 6 views
7

Vous vous demandez si quelqu'un sait si l'une de ces méthodes produirait une sortie plus rapide:Speed ​​PHP - De nombreux Echos vs Construire une chaîne

Method 1 
for ($i=1;$i<99999;$i++) { 
echo $i, '<br>'; 
} 

ou

Method 2 
for ($i=1;$i<99999;$i++) { 
$string .= $i . '<br>'; 
} 
echo $string; 

Merci pour toute entrée que vous avez.

+4

Qui s'en soucie? Si quelque chose, il y aura une différence de quelques microsecondes. Si vous vous souciez de la vitesse, utilisez quelque chose comme Java. –

+3

Essayez-le en cours d'exécution? – Amber

+4

Je dirais, si vous vous souciez de la vitesse utiliser quelque chose comme C;) –

Répondre

3

La méthode 1 semble être plus rapide. Méthode 2 devra cracher un tas de CONCAT opcodes pour chaque itération de la boucle, et la très longue chaîne sera construite en mémoire jusqu'à ce que vous êtes prêt à l'envoyer. La méthode 1 d'autre part sera juste deux opcodes ECHO par boucle, puis PHP/votre serveur web est libre de vider le contenu au client avant que vous ayez terminé complètement, si elle veut. Bien sûr, si vous êtes préoccupé par la micro-optimisation, vous obtiendrez de meilleures performances en utilisant un cache d'opcode, un proxy de mise en cache, ou quelque chose comme hiphop.

+0

alors que là encore l'opération de sortie est assez complexe et dépendant du serveur SAPI jsut remplissant un buffer, donc la seconde approche pourrait être la façon la moins chère de créer un buffer ... peut-être ob_start() et tamponner de cette façon est mieux ... il y a beaucoup de variables impliquées et je pourrais trouver des benchmarks prouvant que chaque approche est "meilleure" :-p Mais c'est inutile ... utiliser un profiler, identifier le goulot d'étranglement, améliorer là. Pas de micro-optimisation. – johannes

0

J'ai lu que la méthode la plus rapide est d'activer output buffering et faire beaucoup d'échos. Je n'ai pas de repères pour confirmer cette affirmation, cependant.

De toute façon, je pense que c'est dans le domaine de la micro-optimisation. La différence est probablement mesurable, mais insignifiante. Comme @Coronatus les commentaires ci-dessus, si votre application était si sensible à la performance, vous n'utiliserez pas PHP!

+1

"si votre application était si sensible aux performances, vous n'utiliseriez pas PHP" Dites-le à Facebook ;-) Il y a toujours moyen de faire mieux PHP –

+1

@Italy Moav - Oui, mais PHP n'est utilisé que pour le travail frontal sur Facebook. Les langues officielles sont le C++, Java et PHP. Le chat (le plus gourmand en ressources) est fait en C++. Beaucoup de bons articles sur les performances à highscalability.com –

0

Si vous wan à micro-optimize, chercher à changer $ i ++ à ++ $ i et

4

Méthode 1 utilise moins de mémoire et CPU et est « plus rapide » (moins la charge du serveur) Mais le goulot d'étranglement de sortie le plus probable est le téléchargement des navigateurs.

Si vous ne mettez pas la sortie en mémoire tampon, le navigateur peut commencer à télécharger des feuilles de style, des images, etc.
(alors que votre script attend des résultats de la requête)

Vérifiez les réponses sur PHP Optimalization ou http://code.google.com/speed/articles/optimizing-php.html pour plus de conseils.

+0

Vous ne savez pas si la méthode 1 est plus rapide car elle utilise une virgule comme opérateur de concaténation. –

+0

@Alix L'utilisation de plusieurs paramètres pour l'écho (la virgule) est censée être plus rapide que la première concaténation, puis l'écho. –

+0

Oui, mais le deuxième exemple utilise un opérateur de concaténation plus rapide: le '.'. A partir de quelques benchmarks que j'ai vu en utilisant ',' au lieu de '.' diminue" significativement "la performance. –