Техника описала хорошие взгляды, но имеет несколько ловушек:
1) время между Сценарием PHP запускается, и конец является маленьким по сравнению со временем передачи; также, это сохраняет пользователя приблизительно 0,5 секунды, согласно Вашему источнику. Это - существенное количество времени для Вас?
2) эта техника не работает с выходной буферизацией gzip
3), если Вы будете сбрасывать слишком часто, Вы будете отправлять почти-пустой-пакет на сбросе, который мог бы на самом деле увеличить время загрузки (на медленных, шумных соединениях).
4), как только Вы сбрасываете, Вы не можете больше отправлять заголовки
5) (незначительная проблема), ответ сервера произойдет в разделенное на блоки кодирование, что означает, что клиент не будет знать, размер заранее (поэтому не отобразит "x %, сделанный" при загрузке файла).
, С другой стороны, если Вы ожидаете, что Ваш сценарий будет работать в течение loooong времени (20 + секунды), можно быть необходимо отправить некоторые данные (пробелы, например), чтобы помешать браузеру приводить к таймауту соединения.
Вниз сторона - то, что Вы не можете gzip содержание, а также сбрасывание его afaik, таким образом, я всегда предпочитал gzip, а не сбросу.
Это делает это не идеей, поскольку кажется, что дополнение большего количества данных не очень полезно.
Точка следующего Piskvor - если Вы ожидаете 20-е +, ожидает, можно быть более обеспеченным обеспечением основной страницы (который может быть gzipped), и Ajax использования для обновления страницы, когда медленный процесс закончился. Вы действительно начинаете нарушать основную полноценность статического HTML, все же.
Я думаю, что flush - это действительно механизм тонкой настройки. Браузеры используют только около 8 потоков для загрузки контента (зависит от браузера). Если у вас 15 изображений, браузер начнет загружать 8 изображений и не будет загружать ничего другого, пока одно из них не завершится, затем он начнет загружать следующее изображение и т.д. Промывая страницу после заголовка, вы, по сути, сообщаете браузеру, что он может начать загрузку. К тому времени, когда будет доставлена остальная часть страницы (т.е. через .5 секунды), браузер, возможно, уже закончит загрузку файлов css и javascript. Это освободит потоки загрузки для другого содержимого.
Вы, вероятно, не захотите использовать flush в любом другом месте, кроме как сразу после заголовка. Браузер обычно не отображает незакрытые html-теги, поэтому доставка неполной страницы не ускорит отображение. Старые версии IE вообще не будут отображать ничего, пока не будет получен определенный объем данных или пока доставка страницы не будет завершена.