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