Считается ли использование буферизации вывода плохой практикой? [закрыто]


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

Существуют ли какие-либо недостатки буферизации вывода?

Author: David, 2011-01-19

8 answers

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

 20
Author: kos, 2011-01-19 03:17:07

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

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

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

 15
Author: DeveloperChris, 2012-08-06 17:08:32

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

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

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

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

 10
Author: Alfred, 2017-05-23 12:25:43

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

 7
Author: Jonah, 2011-01-19 03:26:06

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

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

 4
Author: Dmitri, 2011-01-19 03:33:48

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

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

 3
Author: Roger Halliburton, 2011-01-19 05:33:03

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

 1
Author: Nazmin, 2011-01-19 03:10:25

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

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

 1
Author: Tim Lind, 2011-05-17 13:08:03