2009-10-12 12 views
23

Solo quiero elegir los cerebros de los expertos en el buffer de salida de php. Hay momentos en los que he querido implementarlo por una razón u otra, pero siempre he logrado reorganizar mi código para evitarlo.Buffer de salida PHP: parece una mala idea, ¿o sí?

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

¿Estoy muy lejos de aquí?

Respuesta

19

Según mi experiencia, no hay un impacto significativo en el rendimiento. Tampoco puedo encontrar respuestas consistentes sobre el tema: algunas personas afirman que apenas hay ningún golpe contra el rendimiento, mientras que otros dicen que hay un efecto menor pero significativo. Incluso hay un comentario en php.net que sugiere que el almacenamiento en memoria intermedia aumenta el rendimiento en comparación con funciones de salida múltiples, no es que haya verificado eso ni nada.

Creo que la cuestión de si el almacenamiento intermedio tiene o no tiene más que ver 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. Dado que no se requiere mucho esfuerzo para agregar almacenamiento en búfer, también puedes probarlo; debería ser relativamente fácil de eliminar si es necesario.

+1

Wow, esa es la primera vez que he oído hablar de ... el aumento potencial en el rendimiento. Tienes razón, debería jugar con eso, especialmente mientras estoy en la etapa de desarrollo. – Aaron

+1

Existe un motivo lógico por el que se mejora el rendimiento: php no se está "separando del procesamiento", por lo tanto, el procesamiento es mucho más rápido porque es continuo; lo mismo ocurre con la transferencia de datos. Por supuesto, parece que va a utilizar más memoria a la vez, pero lo mantiene durante menos tiempo. A pesar de que probablemente estés cargando algo de framwork/library que requiere mucho más, por lo que no debería ser una diferencia significativa teniendo en cuenta la cantidad de código fuente "normal" output-ed ... :-) –

8

Creo que todo lo contrario. La salida de almacenamiento en búfer no es una mala idea a menos que te encuentres con una situación en la que realmente la necesites. Por ejemplo, una secuencia de comandos que va a crear grandes cantidades de salida.

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

+0

Hay un pensamiento ... úselo pero tenga una manera de apagarlo cuando la salida sea masiva. Buen punto, hombre! – Aaron

+1

La forma más fácil de "desactivarlo" para un script con muchos resultados (piense en algún informe que envíe un montón de datos de csv, o algo así) es simplemente ob_end_flush(); arriba en la parte superior de tu script Puede (intentar) forzar la salida dentro de su ciclo con flush(); – timdev

4

Uso del almacenamiento en búferes de salida Pude crear un sistema de plantillas livianas rápidamente para un backend MVC hecho en casa para mi último proyecto PHP. Me encanta y me resulta muy útil.

Y en cuanto a los recursos: no es tan intensivo en recursos. Si le preocupa lo poco que utiliza, 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á.

+0

@Dinah, tenía la impresión de que PHP era súper liviano ... pero eso es probablemente porque estoy acostumbrado a ColdFusion. ¿Qué es aún más ligero? – Aaron

+1

@ Aaron C, o ASM. PHP es un lenguaje tan flexible que, por lo general, es mucho más lento que cualquier otro lenguaje de escritorio, como C, C++, Java, C#, etc. Sin embargo, en comparación con otros lenguajes de scripting, todavía puede ser bastante rápido. – phihag

4

Si se encuentra en una situación en la que el contenido sale antes que los encabezados, deberá rellenarlo en un búfer o la página generará un error al emitir el contenido antes de los encabezados. Esto me ha sucedido con bibliotecas compartidas y sin tiempo suficiente para entrar y hacer una reparación adecuada para poder iniciar. Es uno de esos que marcan un // TODO/FIXME y luego regresan y lo hacen más apropiado más adelante.

Cuestiones relacionadas