2008-12-09 5 views
23

Я только что закончил читать это сообщение: https://developer.yahoo.com/performance/rules.html#flush и уже реализовал флеш после загрузки верхней части моей страницы (head, css, top banner/search/nav).PHP Flush: Как часто и наилучшим образом

Есть ли какой-либо удар производительности при промывке? Есть ли такая вещь, как делать это слишком часто? Каковы наилучшие методы?

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

+1

Поскольку это все еще читается: рассмотрите вместо этого некоторую асинхронную обработку с уведомлением о результатах через, например, WebSockets. (Это было не A Thing, когда вопрос был задан) – Piskvor 2017-01-27 11:20:19

ответ

19

Техник, описанный выглядит хорошо, но имеет несколько ловушек:

1) время между началом и концом сценария РНР мал по сравнению с временем передачи; Кроме того, это сохраняет пользователя примерно на 0,5 секунды, согласно вашему источнику. Это для вас значительное количество времени?

2) этот метод не работает с выходным GZIP буферизацией

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

4), как только вы вровень, вы можете не посылать больше заголовков

5) (незначительный вопрос) ответ сервера придет в фрагментированной кодировке, что означает, что клиент не будет знать размер заранее (поэтому при загрузке файла не будет отображаться «x% done»).

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

5

С другой стороны, вы не можете gzip содержимое, а также очищать его от афаика, поэтому я всегда предпочитал gzip, а не флеш.

Some versions of Microsoft Internet Explorer will only start to display the page after they have received 256 bytes of output, so you may need to send extra whitespace before flushing to get those browsers to display the page.

Это делает это не идея, как это кажется обивка больше данных не очень полезно.

+0

Я согласен, однако, большинство людей имеют больше метаданных внутри своих головок, чем 256 символов. На самом деле это не так, если вы думаете об этом. GZip - хороший момент. – 2008-12-09 14:42:00

2

Следующее значение Piskvor - если вы ожидаете ожидания 20s +, вам может быть лучше предоставить базовую страницу (которая может быть gzipped) и использовать Ajax для обновления страницы при завершении медленного процесса. Однако вы начинаете нарушать базовую полезность статического html.

3

Я думаю, что флеш действительно тонкий механизм настройки. Браузеры используют только около 8 потоков для загрузки контента (в зависимости от браузера). Если у вас 15 изображений, браузер начнет загружать 8 изображений и не будет загружать что-либо еще до тех пор, пока один из них не завершится, затем он начнет загружать следующее изображение и т. Д. После промывки после заголовка вы в основном говорите браузеру, что он может начать загрузку. К тому времени, когда остальная часть страницы будет доставлена ​​(т. Е. Через 5 секунд), браузер, возможно, уже закончил загрузку файлов css и javascript. Это освободит потоки загрузки для другого контента.

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