Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Фича PHP: данные клиенту отдаются с задержкой
 
 автор: sl1p   (24.03.2011 в 03:34)   письмо автору
 
 

Мм всегда задумывался но не мог, понять, PHP генерит всё на серваке и отдаёт в браузер уже готовый хтмл код отправляя все заголовки и т.д.

Тогда почему мы визуально можем наблюдать как постепенно добавляются данные(с задержкой) на страницу если к примеру в цикле вывода положить sleep()?

  Ответить  
 
 автор: cheops   (24.03.2011 в 07:40)   письмо автору
 
   для: sl1p   (24.03.2011 в 03:34)
 

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

  Ответить  
 
 автор: sl1p   (24.03.2011 в 13:08)   письмо автору
 
   для: cheops   (24.03.2011 в 07:40)
 

да нет просто интересно как так происходит.


Браузеру же отправляется Заголовки + хтмл контент

В данном случае получается что браузеру отправляется контент порциями?
Просто спрашиваю потому что исходя из логики браузер запросил - сервер отдал, не могу понять как так получается.

  Ответить  
 
 автор: cheops   (24.03.2011 в 14:18)   письмо автору
 
   для: sl1p   (24.03.2011 в 13:08)
 

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

  Ответить  
 
 автор: sl1p   (24.03.2011 в 14:34)   письмо автору
 
   для: cheops   (24.03.2011 в 14:18)
 

Хм всё равно немного не ясно.

происходит как:

1. Сервер какимто боком вызывает клиента и говорит что у него есть следующий кусок контента?
2. Сервер отдаёт браузеру сразу весь контент(в течении одного соединения), но контент бьётся на части пока доходит до браузера и по мере поступления частей идёт отображение?

  Ответить  
 
 автор: cheops   (24.03.2011 в 17:53)   письмо автору
 
   для: sl1p   (24.03.2011 в 14:34)
 

1. Нет, клиент вызывает сервер и говорит, что у него нет следующего куска контента.
2. Может так, а может и нет, сервер выдает контент по запросу, если клиент попросит второй раз - выдаст еще раз, если клиент попроисит выдать с 50% до 100% выдаст эту часть, минуя первую половину. Учитывайте, что протоколов очень много и данные вложены в обертку пакетов протоколов по принципу матрешки. Если вам интересно, как Интернет устроен, лучше почитать хорошую книгу по TCP/IP. Из этого не только станет понятно, почему PHP не торопится данные передавать, но и почему график Сети такой зубчатый и что эти зубчики означают и почему на широком канале так хреново Web-сайты отображаются... в сетях много чего интересного зарыто - эта целая индустрия, которую серверные языки и Web-сервера инкапсулируют, но покопаться в них я думаю ни одному Web-специалисту не будет скучно.

Однако и в первом и во втором случае весь контент бъется на части, более того, каждая из частиц может разбиться еще на части, в зависимости от того по какому протоколу в данный момент передается контент.

  Ответить  
 
 автор: sl1p   (24.03.2011 в 17:55)   письмо автору
 
   для: cheops   (24.03.2011 в 17:53)
 

хм.. спасибо большое:)

  Ответить  
 
 автор: zend72   (27.03.2011 в 20:41)   письмо автору
 
   для: cheops   (24.03.2011 в 17:53)
 

> Если вам интересно, как Интернет устроен, лучше почитать хорошую книгу по TCP/IP.
cheops, не могли бы вы посоветовать хорошую книгу по TCP/IP?

  Ответить  
 
 автор: cheops   (27.03.2011 в 21:40)   письмо автору
 
   для: zend72   (27.03.2011 в 20:41)
 

Вот эта книга хорошая Дуглас Э. Камер. Сети TCP/IP. Том 1. Принципы, протоколы и структура. Правда, ozon пишет, что её уже нет в продаже... Вообще тема достаточно давно разработана и практически в любой книге по TCP/IP вы найдете и историю развития Интернет, и современное состояние, и описание стека протоколов. Причем достаточно добротное. Я бы если сейчас подбирал книгу по этой тематике, то набрал бы TCP/IP и выбрал любую книгу 3-4-5 издания объемом не менее 600 страниц.

  Ответить  
 
 автор: zend72   (27.03.2011 в 21:58)   письмо автору
 
   для: cheops   (27.03.2011 в 21:40)
 

Спасибо.

  Ответить  
 
 автор: Саня   (24.03.2011 в 14:23)   письмо автору
 
   для: sl1p   (24.03.2011 в 03:34)
 

Браузеры уже давно научились отображать контент по мере его поступления. Это раньше страница не отображалась, пока не будет загружен весь её контент.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования