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

Являются ли ob_start/ob_get_clean() плохой практикой программистами php вообще?

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

Ответы

Ответ 1

Это действительно хорошая практика. Ускорьте передачу данных

Ответ 2

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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