Используется ли буферизация вывода, считающаяся плохой практикой?

ob_get_clean() / ob_get_clean() считается плохой практикой программистов php в целом?

Есть ли недостатки буферизации вывода?

На самом деле это хорошая практика. Ускорьте передачу данных

Буферизация вывода в некоторых случаях почти обязательна. С PHP, как только вы выведете что-то обратно пользователю, отправляются заголовки. Поэтому, если вы получаете частичную обработку страницы и что-то происходит, что требует отправки заголовка, вы не можете включить буферизацию. В противном случае вы получите страшный «Невозможно изменить информацию заголовка – уже отправленные заголовки».

Некоторые скажут вам, что вы не должны так кодировать. humbug Я говорю!

С включенным буфером ваш код может быть более гибким.

буферизация вывода не является плохой практикой. Например, это может ускорить загрузку вашего сайта с помощью сжатия GZIP (хотя, по возможности, лучше сделать это внутри .htaccess).

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

Недостатки: я не знаю. Хороший вопрос.

PS: Также я нашел эту тему о буферизации вывода .

Для эффективности программы захват выходного буфера неплох. Это полезная функция PHP. Тем не менее, он может использоваться для вещей, которые лучше выполняются другими способами. Запах кода может быть проблемой с ним, поэтому убедитесь, что нет лучшего и более четкого решения вашей проблемы.

Это не считается плохим (или хорошим). Некоторым нравится это, некоторые не делают. Лично я думаю, что есть причины не использовать его. Я думаю об этом в крайнем случае. Иногда может возникнуть ситуация, когда буферизация вывода может быть вашим единственным выбором для решения конкретной проблемы, поэтому сохраните эту опцию только для таких ситуаций.

Я не думаю, что есть увеличение производительности или ускорение загрузки страницы, используя это, но это также зависит от того, какой сервер вы используете, и если вы используете php как mod_php или как cgi или fastcgi.

Основным недостатком буферизации вывода является то, что вы не знаете (или не обращаете внимания), насколько глубоко ваш буферный стек. Объедините это с чрезмерно агрессивной обработкой ошибок или подпрограммами, которые неожиданно выходят / умирают, и вы потеряете все, что находится в буфере, оставляя мало подсказок относительно того, что происходит.

Например, среда Zend использует буферизацию вывода почти для всех, но когда она достигает критической ошибки, она выводит сообщение и немедленно выходит. Любая полезная отладочная информация теряется.

Если я не ошибаюсь, у java также есть эта буферизация ввода и вывода для чтения и записи файла.

Разумеется, буферизация вывода означает, что содержимое, которое могло быть отправлено в браузер сразу, теперь торчит на сервере, что занимает дополнительную память (очень важная проблема, если вы имеете дело с высокой масштабируемостью), поэтому, если ваша программа затем принимает в то время как выполнение, эти издержки памяти ухудшат производительность.

Я не знаю PHP достаточно хорошо, чтобы сказать, верно ли это, или если он даже освобождает память, когда вы не используете буферизацию, но это обычно теория.