ПРОЕКТЫ 


  АРХИВ 


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: feature request: проверка расширения



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



 




Copyright © Lexa Software, 1996-2009.