Буферизация вывода PHP - звучит как плохая идея, не так ли?

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

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

Я далеко отсюда?

4 ответа

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам