Preg_match или parse_url? Что быстрей?
21.02.2007, nickspring
Собственно, на небольшой эксперимент натолкнула соответствующая тема на форуме searchengines.ru, в которой выдвигали версию, что для излечения хоста из URL preg_match быстрей чуть ли не в разы и что это проверено. Честно говоря, готового ответа у меня не было… но было смутное подозрение, что язык на котором написан интерпретатор Php обрабатывает конструкции в разы быстрей последнего (а собственно parse_url — функция ядра PHP)… решил проверить, наглядный результат и исходный код:
http://www.controlstyle.ru/trash/extract-host-compare/.
Preg_match медленней, причем в разы
.
21.02.2007 в 11:41 am.
Медленная работа Preg_match заметна будет только при больших объемах обрабатываемых url. Например от 1000.
А так если в каталожном скрипте проверяется один раз домен, то разница будет не ощутима.
P.S. Всё равно полезная инфа. Николай, спасибо за эксперимент!
21.02.2007 в 12:38 pm.
По субъективной ощутимости? Конечно не будет заметна. Речь шла о точных методах
.
21.02.2007 в 4:17 pm.
На всякий случай.., регексп не совсем верный.
Парсе урл проверяет наличие логина, пароля, порта в урле… у тебя этого нет. Но если упростить задачу, все равно регэксп не коректный.
вместо
http://(.*)/
надо
http://[^/]+/
21.02.2007 в 4:22 pm.
скобки забыл
http://([^/]+)/
21.02.2007 в 4:45 pm.
БоГ, с модификаторами знакомы? Например, "U" от слова "ungreedy"
. Все прекрасно работает для текстовой строки, а
в эксперименте не было задачи построить суперуниверсальный шаблон для выборки хоста, даже наоборот я постарался максимально его упростить. То, что parse_url выбирает больше параметров это только в плюс… при больших операциях обгон в несколько раз.
21.02.2007 в 4:48 pm.
угу, потому что они не обязательны по тому же RFC и для того же parse_url.
21.02.2007 в 8:07 pm.
Спасибо за эксперимент, хотя даже в той кривой книге, которая служила мне самоучителем, было сказано, что ВСЕГДА нужно использовать встроенные функции вместо написания регов, поскольку реги являются скорее способом через ж..у и применять их нужно только когда другого способа нет.
21.02.2007 в 8:30 pm.
Locker, не знаю, но классический взгляд состоит в том, что регэкспы быстрей всего… так оно и есть… просто интерпретатор выполняет их дольше, чем C++ на сервере (или на чем там писан Php?).
05.03.2007 в 8:46 pm.
Дак понятно. Встроенные функции всегда быстрее, чем регулярное выражение. Я имею ввиду все те встроенные функции, которые выполняют возложенную на них задачу за одно применение.
>Locker, не знаю, но классический взгляд состоит в том, что
> регэкспы быстрей всего… так оно и есть… просто интерпретатор
> выполняет их >дольше, чем C++ на сервере (или на чем там писан Php?).
PHP написан на C. Регэкспы не быстрей всего. То же самое, что может сделать регэксп, можно написать используя строковые функции и сложный анализ. Только вот кому это надо, когда есть регэкспы?