¿El uso de almacenamiento en búfer de salida se considera una mala práctica? [cerrado]


Son ob_start / ob_get_clean() considerado mala práctica por los programadores de php en general?

¿Hay alguna desventaja del almacenamiento en búfer de salida?

Author: David, 2011-01-19

8 answers

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

 20
Author: kos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-19 03:17:07

El almacenamiento en búfer de salida en algunas circunstancias es casi obligatorio. Con PHP tan pronto como se devuelve algo al usuario, se envían encabezados. Por lo tanto, si se obtiene a medio camino a través del procesamiento de una página y algo sucede que requiere que se envíe un encabezado, no puede a menos que el almacenamiento en búfer esté activado. De lo contrario, obtendrá el temido "No se puede modificar la información del encabezado – encabezados ya enviados".

Algunos te dirán que no deberías codificar de esa manera. ¡qué tontería!

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

 15
Author: DeveloperChris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-06 17:08:32

El almacenamiento en búfer de salida NO es una mala práctica. Por ejemplo, puede acelerar la carga de su sitio web mediante la compresión GZIP(aunque si es posible es mejor hacerlo dentro .htaccess).

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

Desventajas: No lo sé. Buena pregunta.

P.d.: también encontré este tema sobre búfer de salida.

 10
Author: Alfred,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:25:43

Para la eficiencia del programa, la captura del búfer de salida no es mala. Es una característica útil de PHP. Sin embargo, se puede utilizar para cosas que se hacen mejor con otros métodos. El olor a código puede ser un problema con él, así que asegúrese de que no hay una solución mejor y más clara a su problema.

 7
Author: Jonah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-19 03:26:06

No se considera malo (o bueno). Algunas personas les gusta, a otras no Personalmente creo que hay razones para no usarlo. Pienso en ello como último recurso. A veces puede tener una situación en la que 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 para este tipo de situaciones.

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

 4
Author: Dmitri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-19 03:33:48

La principal desventaja del búfer de salida es no saber (o prestar atención a) la profundidad de su pila de búfer. Combine esto con un manejo de errores demasiado agresivo o subrutinas que salen/mueren inesperadamente y perderá lo que esté en el búfer, dejando pocas pistas sobre lo que está pasando.

Por ejemplo, el framework Zend hace uso del almacenamiento en búfer de salida para casi todo, pero cuando llega a un error crítico, imprime un mensaje y sale inmediatamente. Cualquier depuración útil la información se pierde.

 3
Author: Roger Halliburton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-19 05:33:03

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

 1
Author: Nazmin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-19 03:10:25

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, lo que está ocupando memoria adicional (un problema muy importante si se trata de una alta escalabilidad), por lo que si su programa tarda un tiempo en ejecutarse, esta sobrecarga de memoria perjudicaría el rendimiento.

No conozco PHP lo suficientemente bien como para decir si esto es cierto o si incluso libera la memoria cuando no se utiliza el almacenamiento en búfer, pero que suele ser el teoría.

 1
Author: Tim Lind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-17 13:08:03