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

Igor Sysoev is at rambler-co.ru
Wed Apr 12 20:52:02 MSD 2006


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





More information about the nginx-ru mailing list