feature request: проверка расширения
Igor Sysoev
is at rambler-co.ru
Wed May 31 12:55:12 MSD 2006
On Wed, 31 May 2006, Evgeny Stepanischev wrote:
> Игорь, у меня есть такое пожелание: нельзя ли сделать какую-нибудь
> специальную конструкцию для проверки расширения в location. Задача
> подобна этой:
>
> location ~ \.(gif|jpg|jpeg|png|ico|txt|zip|dll)$ {
> }
>
> довольно частая ситуация, а решать её приходится регулярными
> выражениями, что не является, наверное, оптимальным по
> производительности.
Я не думаю, что будет существенный выигрыш. Мне была интересна
разница в производительности между регулярным выражением и strncmp
на некоторых простых примерах.
Миллион итераций скомпилированного выражения
"^/users/(.+?)/"
на строке "/users/ulala/test" у меня выполялись 700ms.
Нижеприведённый код - 25ms:
if (strncmp(line, "/users/", 7) == 0) {
for (n = 7; n < len; n++) {
if (line[n] == '/') {
break;
}
}
}
Замена strncmp() на strncasecmp() - 100ms.
Я не думаю, что ручной перебор кучи расширений будет существенно быстрее,
чем регулярное выражение. Кроме того, нужно иметь ввиду, что результаты
микробенчамарков обычно расходятся с жизнью, потому что в повторяющихся
итерациях существенную роль играет кэш.
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list