2010-06-05 15 views
7

Se pregunta si alguien sabe si cualquiera de estos métodos podría producir una salida más rápida:PHP velocidad - Muchas Echos vs La construcción de una cadena

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

o

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

Gracias por cualquier entrada que tiene.

+4

¿A quién le importa? En todo caso, habrá una diferencia de algunos microsegundos. Si te preocupa la velocidad, usa algo como Java. –

+3

¿Intenta ejecutarlo? – Amber

+4

Yo diría, si te importa la velocidad, usa algo como C;) –

Respuesta

3

Parece que el método 1 sería más rápido. El Método 2 tendrá que escindir un montón de códigos de operación CONCAT para cada iteración del ciclo, y la cadena muy larga se integrará en la memoria hasta que esté listo para enviarla. Por otro lado, el Método 1 consistirá en dos códigos de operación ECHO por ciclo, y luego PHP/su servidor web puede enviar contenido al cliente antes de que haya terminado por completo, si así lo desea.

Por supuesto, si le preocupa la micro-optimización, obtendrá un rendimiento mucho mejor si utiliza un caché de código de operación, un proxy de almacenamiento en caché, o algo así como hiphop.

+0

mientras que, una vez más, la operación de salida es bastante compleja y depende del servidor SAPI jsut llenar un buffer, por lo que el segundo enfoque podría ser la forma más económica de crear un buffer ... quizás ob_start() y el almacenamiento en búfer de esa manera es mejor ... hay muchas variables involucradas y podría encontrar puntos de referencia que prueben cada enfoque "mejor" :-p Pero es inútil ... usar un generador de perfiles, identificar el cuello de botella, mejorar allí. Sin micro-optimización. – johannes

0

He leído que el método más rápido es habilitar output buffering y hacer muchos ecos. No tengo puntos de referencia para confirmar esta afirmación.

De todos modos, creo que esto es en el ámbito de la micro-optimización. La diferencia es probablemente mensurable, pero insignificante. Como comenta @Coronatus arriba, si tu aplicación fuera tan sensible al rendimiento, ¡no estarías usando PHP!

+1

"si tu aplicación fuera tan sensible al rendimiento, no estarías usando PHP" Dile eso a Facebook ;-) Siempre hay formas de mejorar PHP –

+1

@Italia Moav - Sí lo hacen, pero PHP solo se usa para el trabajo frontend en Facebook Los idiomas oficiales son C++, Java y PHP. El chat (el que requiere más recursos) se realiza en C++. Muchos buenos artículos sobre el rendimiento en highscalability.com –

0

Si wan para micro-optimización, mira a los cambios de $ i ++ a ++ $ i, así

4

Método 1 utiliza menos memoria y CPU y es (carga Menos servidor) "más rápido" Pero el cuello de botella de salida lo más probable es la velocidad de descarga de los navegadores.

Si no almacena en búfer la salida, el navegador puede comenzar a descargar hojas de estilo, imágenes, etc. antes.
(mientras que la secuencia de comandos está esperando algunos resultados de la consulta)

Comprobar las respuestas en PHP Optimalizationhttp://code.google.com/speed/articles/optimizing-php.html o para obtener más consejos.

+0

No estoy seguro si el método 1 es más rápido ya que usa una coma como operador de concatenación. –

+0

@Alix Se supone que usar múltiples parámetros para el eco (la coma) es más rápido que concatenar primero y luego hacer eco. –

+0

Sí, pero el segundo ejemplo usa un operador de concatenación más rápido: el '.'. De algunos puntos de referencia que he visto usar ',' en lugar de '.', disminuye '' significativamente '' el rendimiento. –

Cuestiones relacionadas