Буферизация вывода PHP - звучит как плохая идея, не так ли? - PullRequest
25 голосов
/ 13 октября 2009

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

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

Я здесь далеко?

Ответы [ 4 ]

20 голосов
/ 13 октября 2009

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

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

8 голосов
/ 13 октября 2009

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

В большинстве случаев сжигание большого количества времени программиста для сохранения неизвестного количества (дешевой) памяти звучит как пустая трата ресурсов.

5 голосов
/ 13 октября 2009

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

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

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

А что касается ресурсов: это не так ресурсоемко. Если вы беспокоитесь о том, что он мало использует, PHP не является подходящим инструментом для работы. Я люблю PHP, но это НЕ самый легкий вариант. На любом достаточно современном сервере это не имеет значения.

...