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 достаточно хорошо, чтобы сказать, верно ли это, или если он даже освобождает память, когда вы не используете буферизацию, но это обычно теория.