salida ob_start php performance output-buffering

ob_start - PHP buffering de salida-suena como una mala idea, ¿verdad?



php ob_start echo (4)

Desde mi experiencia, no hay un impacto significativo en el rendimiento. Tampoco puedo encontrar respuestas consistentes sobre el tema: algunas personas afirman que casi no hay impacto en el desempeño, mientras que otras dicen que hay un efecto menor pero significativo. Incluso hay un comentario en php.net que sugiere que el almacenamiento en búfer aumenta el rendimiento en comparación con las múltiples funciones de salida, no que haya verificado eso ni nada.

Creo que la cuestión de si o no amortiguar tiene que ver más con el uso previsto de su aplicación. El almacenamiento en búfer tiene mucho sentido si desea comprimir la salida antes de enviarla, o si desea controlar exactamente cuándo y dónde tiene lugar la salida en su código. Ya que no requiere mucho esfuerzo agregar un búfer, también puede probarlo, debería ser relativamente fácil eliminarlo si lo necesita.

Solo quiero elegir los cerebros de los expertos en el búfer de salida php. Hay ocasiones en las que he querido implementarlo por una razón u otra, pero siempre he logrado reorganizar mi código para evitarlo.

Evito usarlo porque parece que costará recursos. Quiero decir, si pueden ofrecer al programador una flexibilidad tan maravillosa, ¿por qué no siempre amortiguan la salida? La única respuesta que se me ocurre es que, al no almacenar en búfer, se ahorran recursos tremendos y, con una buena práctica de codificación, no debería necesitarla.

¿Estoy lejos de aquí?


Pienso lo contrario. No almacenar en búfer la salida es una mala idea, a menos que se encuentre en una situación en la que realmente la necesite. Por ejemplo, un script que va a crear enormes cantidades de salida.

En la mayoría de los casos, quemar un montón de tiempo de programador para ahorrar una cantidad desconocida de memoria (barata) suena como un desperdicio de recursos.


Si se encuentra en una situación en la que el contenido obtiene salida antes de los encabezados, deberá rellenarlo en un búfer o, de lo contrario, la página generará un error de ese contenido antes de los encabezados. Esto me ha sucedido con bibliotecas compartidas y no tengo suficiente tiempo para entrar y hacer una solución adecuada para poder iniciar. Es uno de los que marcan un // TODO / FIXME y luego vuelve y lo hace correcto más adelante.


Usando el búfer de salida, pude hacer un sistema de plantillas de peso ligero rápidamente para un backend MVC elaborado en casa para mi último proyecto PHP. Me encanta y me resulta muy útil.

Y con respecto a los recursos: no es un recurso tan intensivo. Si le preocupa lo poco que usa, PHP no es la herramienta adecuada para el trabajo. Me encanta PHP pero NO es la opción más ligera. Sin embargo, en cualquier servidor razonablemente moderno, eso no importará.