Использование ob_start
определенно повлияет на время загрузки ваших страниц - , а не"производительность вашего скрипта PHP", что, на мой взгляд, полностью вводит в заблуждение.Но давайте начнем с самого начала.
Время загрузки, воспринимаемое пользователем
Упоминаемая вами сторона, похоже, относится к времени загрузки страницы в восприятии пользователя .То есть, предположим, что у вас есть 10 КБ HTML для отправки, и вы отправляете 1 КБ каждые 50 мс.Также предположим, что браузер не использует свою собственную логику в процессе, и он просто рендерит так быстро, как может читать входящие данные (, что, безусловно, неверно! ).50 мс достаточно для восприятия человеком, поэтому пользователь будет видеть загрузку страницы по частям.
С другой стороны, предположим, что все 10 КБ HTML отправляются за один раз после 500 мс.Хотя это приведет к тому, что пользователь будет ждать одинаковое общее количество времени, страница будет отображаться одним махом, и пользователь будет воспринимать это как быстрее , поскольку "он потратил меньше времени на загрузку".
Я должен также упомянуть, что если вы возьмете тот же самый пример и увеличите время загрузки до 5 секунд (или 10 частей по 0,5 секунды), тогда восприятие пользователя будет изменено на противоположное: теперь вторая страница медленнее потому что "потребовалось так много времени, чтобы начать работу".
Очевидно, что этот вид анализа углубляется в сферу психологии, поэтому я остановлюсь здесь и предложу, что если вам интереснов этом материале есть хороший материал, доступный в сети.По этой причине браузеры do добавляют свой собственный особый соус в процессе рендеринга страницы при получении данных: каждый поставщик хочет, чтобы их браузер чувствовал быстрее, даже еслиЧто касается сети, то все они одинаково быстры.
Буферизация вывода
Давайте также рассмотрим сторону сервера.Все, что находится в стеке веб-сервера, - Apache, PHP, все что угодно между ними - также может выбрать буферизацию данных перед их отправкой.Часто это происходит даже без явного документирования или запроса со стороны разработчика, поэтому вы увидите, что код, который должен был представлять уведомления «заголовки уже отправлены», не делает этого.
Теперь, если вы выполняете буферизацию нана стороне сервера вы действительно заставляете браузер адаптировать к вашему представлению о том, как все должно работать.Давайте вернемся к примеру рендеринга на стороне клиента и рассмотрим браузер, который получает HTML небольшими порциями , но решает отложить рендеринг для того, чтобы он отображался быстрее .Это не означает, что браузер должен делать ничего во время задержки;на самом деле, он, скорее всего, проанализирует HTML и сразу начнет загружать зависимости (таблицы стилей, изображения и т. д.), даже если пока не намеревается отображать страницу.Это логично: если быть открытым, то в конечном итоге содержимое этих ресурсов будет доступно раньше, и вы выиграете войну с «предполагаемой скоростью».
Проблема в том, что если вы принимаете военную команду буферизации, браузер можетбольше не делай этого.Необходимо дождаться отправки контента и начать поиск этих ресурсов.Поскольку мы говорим о CDN, получение ресурсов будет очень быстрым, если не мгновенным (из-за кэширования), но это все равно небольшая или нулевая задержка, от которой вам не пришлось страдать.
Конечно, тогда мы имеемпринять во внимание, что выходная буферизация с целью сжатия может заставить страницу на самом деле быстрее загружаться, потому что данных для отправки просто меньше.Разница будет особенно заметна для людей с медленным соединением.
TL; версия DR
Если вы измерили, что сжатие сильно влияет на скорость загрузки ваших страниц, используйте ее.Если вы не сжимаете, не пытайтесь угадать поставщиков браузеров (которые потратили бесчисленные ресурсы на исследования) по совету сайтов с неизвестными учетными данными.