2011-01-19 27 views

Respuesta

20

En realidad es una buena práctica. Acelere la transferencia de datos

+8

Precisamente, ¿cómo lo hace? ¿Cómo esta respuesta realmente me ayuda? –

+0

Es posible que se refiera a enjuagar el búfer de salida justo después de la etiqueta ''. Ver http://developer.yahoo.com/performance/rules.html –

1

Si no me equivoco java también tiene esta entrada y salida de almacenamiento en búfer para leer y escribir archivos.

10

buffer de salida NO es una mala práctica. Por ejemplo, puede speed up the loading of your website by using GZIP compression (aunque si es posible, es mejor hacerlo dentro de .htaccess).

<?php 
    if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) 
     ob_start("ob_gzhandler"); 
    else 
     ob_start(); 
?> 

Desventajas: No lo sé. Buena pregunta.

P.S: también Encontré este tema sobre output buffering.

+0

En realidad, para algunos navegadores es mejor enviar el encabezado ('Content-Length:'. Ob_get_length()); después de enviar el texto, de lo contrario no pueden decodificarlo correctamente. Para algunos navegadores antiguos, pero hay un porcentaje de ellos todavía – kos

+0

, creo que podría estar en lo cierto. Gracias por la información :) – Alfred

7

Para la eficiencia del programa, la captura del buffer de salida no está mal. Es una característica útil de PHP. Sin embargo, se puede usar para cosas que se hacen mejor con otros métodos. El olor del código puede ser un problema, así que asegúrese de que no haya una solución mejor y más clara para su problema.

+4

¿Qué huele el código? :) – Alex

+2

Problemas con la implementación de uno que causan otros problemas (a veces más grandes). En este caso, usar la solución incorrecta para resolver un problema. Más aquí: http://www.codinghorror.com/blog/2006/05/code-smells.html – Jonah

12

El búfer de salida en algunas circunstancias es casi obligatorio. Con PHP tan pronto como le devuelva algo al usuario, se envían los encabezados. Por lo tanto, si se procesa una página parcialmente y ocurre algo que requiere que se envíe un encabezado, a menos que se active el almacenamiento en búfer. De lo contrario, aparece el temido "No se puede modificar la información del encabezado: encabezados ya enviados".

Algunos le dirán que no debe codificar de esa manera. ¡bufón, digo!

Con los búferes activados, su código puede ser más flexible.

+4

+1 para humbug :) – Magicode

+0

+2 para humbug;) –

4

No se considera malo (o bueno). A algunas personas les gusta, otras no Personalmente creo que hay razones para no usarlo. Lo pienso como último recurso. A veces puede tener una situación donde el almacenamiento en búfer de salida puede ser su única opción para resolver un problema en particular, así que guarde esta opción solo para tales situaciones.

No creo que haya ninguna ganancia en el rendimiento o la aceleración de la carga de la página al usarla, pero también depende del servidor que use y si utiliza php como mod_php o como cgi o fastcgi.

2

La principal desventaja del almacenamiento en búfer de salida es no saber (o prestar atención) qué tan profunda es la pila de almacenamiento intermedio. Combine esto con manejo de errores excesivamente agresivo o subrutinas que salgan/mueran inesperadamente y perderá todo lo que está en el búfer, dejando pocas pistas sobre lo que está sucediendo.

Por ejemplo, Zend Framework hace uso del buffering de salida para casi todo, pero cuando se produce un error crítico imprime un mensaje y sale inmediatamente. Cualquier información de depuración útil se pierde.

1

Seguramente el almacenamiento en búfer de salida significa que el contenido que podría haber sido enviado al navegador inmediatamente ahora se queda en el servidor, que está ocupando memoria extra (un problema muy importante si se trata de una alta escalabilidad). el programa tardará un poco en ejecutarse, esta sobrecarga de memoria perjudicaría el rendimiento.

No sé PHP lo suficiente como para decir si esto es cierto o si incluso libera la memoria cuando no utiliza el almacenamiento en búfer, pero esa suele ser la teoría.

Cuestiones relacionadas