ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Тормозной $r->frlush



On Wed, 12 Apr 2006, Andrew Pavlenko wrote:

Использование $r-rflush в perl'овых скриптах под nginx
(http_perl_module) - дорогая по времени операция.

Скорость отдачи ответа вот так:

$r->header_out("Count", $count);
$r->send_http_header("text/html");
return OK;

или вот так:

$r->send_http_header("text/html");
$r->print($count);
return OK;

составляет 0.01 секунду.

А вот так:

$r->send_http_header("text/html");
$r->print($count);
$r->rflush;
return OK;

- 0.1 секунда.

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

Игорь, это так и должно быть или тебе открылось поле для оптимизаций? :)

В 0.3.38 ngx_http_perl_module будет пооптимизирован, но в данном случае
дело не в этом.

$r->send_http_header() в ядро ничего не передаёт (размер заголовка мал).
Небольшой $r->print() тоже ничего не передаёт. Все эти данные просто
накапливаются, пока не превысят postpone_output (1460) или запрос не будет
полностью отработан.
А вот $r->rflush - передаёт накопившиеся данные в ядро. Мораль - последний
$r->rflush не нужен. Промежуточные - в зависимости от ситуации.


Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.