2009-10-01 14 views
7

Cuando el rendimiento es importante, incluida la memoria del servidor, tengo curiosidad por utilizar el almacenamiento en memoria intermedia de salida como ob_start(); en PHP, ¿CUALQUIERA hits de rendimiento por no usarlo? ¿Utiliza más memoria o algo para usarlo?¿El almacenamiento en búfer de salida en PHP requiere más recursos?

En mi situación en un sitio de mucho tráfico donde necesito toda la memoria que puedo para memcache y APC y todas las demás actividades del servidor, tengo curiosidad si debo usarlo o no, la única razón real es muy útil para mí es para redirigir páginas, enviar cabeceras, debería decir después de que ya se envió un encabezado, mi sitio tiene configuración de encabezado, cuerpo, archivo de pie de página, así que alguna vez tengo que redirigir dependiendo de lo que está en el archivo de cuerpo así que si el encabezado ya está se muestra la pantalla iónica que crea un problema, el buffering de salida es una solución, pero hay otras soluciones, solo curiosidad por el rendimiento

Respuesta

1

Creo que es mejor usarlo en un sitio de mucho tráfico, o al menos apagarlo implícitamente, para evite enviar respuestas parciales a través de la red, porque puede ralentizar el resto del guión si el receptor también es muy lento.

Al enviar toda la respuesta de una vez, libera todos los recursos utilizados por la secuencia de comandos php, por lo que es más eficiente.

+0

Acabo de leer abit abt PHP output buffer also. Estoy pensando que requerirá memoria del servidor para almacenar toda la página b4 enviándola como 1 pieza, ¿verdad? Entonces, ¿existe la posibilidad de que use más memoria que sin almacenamiento en memoria intermedia? – iceangel89

+0

@ iceangel89 esa fue mi preocupación inicial y lo que realmente me gustaría averiguar – JasonDavis

+0

Lo siento, me olvidé de mencionar este punto ... Creo que la sobrecarga de salida de almacenamiento en búfer es importante cuando se utiliza gzhandler para la compresión. Para el almacenamiento en búfer simple, almacena todo en la memoria, pero no creo que vea una gran diferencia (las páginas HTML grandes no superan los 200 K, ¿verdad?). Puede probarlo fácilmente con memory_get_usage() con y sin buffer de salida. –

3

Hay dos razones por las búfer de salida es útil

  1. Para obtener un rendimiento por lo que no está esperando la toma de red sea disponibles cada vez que echo.
  2. Para evitar el envío de los encabezados también temprano. Una vez que haya enviado un contenido de al explorador, los encabezados también se deben enviar, después de que esto sea hecho, entonces no puede modificarlos p. Ej. si desea establecer una cookie o cambie el tipo de contenido.

Por supuesto, existe la pena de almacenar todo en la memoria hasta el final de la solicitud. Esto debería, normalmente, ser bastante pequeño en comparación con el tamaño general del proceso de PHP. Es decir, a menos que planee enviar un archivo masivo por el cable. Si ese es el caso, puede enjuagar periódicamente el búfer usando ob_flush() y flush() (o deshabilitar temporalmente el búfer por completo) para reducir la memoria de pico utilizada.

En mi opinión, debería tenerlo todo el tiempo y eliminarlo en casos excepcionales.

Cuestiones relacionadas