Требуется ли для буферизации вывода в PHP больше ресурсов? - PullRequest
8 голосов
/ 01 октября 2009

Когда важна производительность, включая память сервера, мне любопытно использовать буферизацию вывода как ob_start (); в PHP есть какие-либо потери производительности по сравнению с его использованием? Это использует больше памяти или что-нибудь, чтобы использовать это?

В моей ситуации на сайте с высоким трафиком, где мне нужна вся память, которую я могу использовать для memcache и APC, а также для всех других операций сервера. Мне просто любопытно, стоит ли мне это использовать или нет, единственная реальная причина, по которой это пригодится для я для перенаправления страниц, отправки заголовков, я должен сказать, что после того, как заголовок уже отправлен, мой сайт имеет настройку файла заголовка, тела, нижнего колонтитула, поэтому иногда мне нужно перенаправить в зависимости от того, что находится в файле тела, так что, если заголовок уже показан Ионный экран, который создает проблему, с использованием буферизации вывода - это 1 решение, но есть и другие решения, поэтому просто интересно узнать производительность

Ответы [ 2 ]

4 голосов
/ 01 октября 2009

Есть две причины, по которым буферизация вывода полезна

  1. За производительность, чтобы вы не в ожидании сетевого сокета доступны каждый раз, когда вы эхо.
  2. Чтобы не отправлять заголовки тоже рано. После того, как вы отправили содержание в браузере заголовки также должны быть отправлены, после этого сделано, то вы не можете изменить их например если вы хотите установить cookie или изменить тип контента.

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

По моему мнению, вы должны иметь его постоянно и удалять в исключительных случаях.

3 голосов
/ 01 октября 2009

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

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

...