nickspringPreg_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 медленней, причем в разы .

Добавить в  google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Комментарии (9) к статье "Preg_match или parse_url? Что быстрей?"

  1. sEoK (nic2006) пишет:

    Медленная работа Preg_match заметна будет только при больших объемах обрабатываемых url. Например от 1000.
    А так если в каталожном скрипте проверяется один раз домен, то разница будет не ощутима.
    P.S. Всё равно полезная инфа. Николай, спасибо за эксперимент!

  2. nickspring пишет:

    По субъективной ощутимости? Конечно не будет заметна. Речь шла о точных методах .

  3. БоГ пишет:

    На всякий случай.., регексп не совсем верный.
    Парсе урл проверяет наличие логина, пароля, порта в урле… у тебя этого нет. Но если упростить задачу, все равно регэксп не коректный.
    вместо
    http://(.*)/
    надо
    http://[^/]+/

  4. БоГ пишет:

    скобки забыл
    http://([^/]+)/

  5. nickspring пишет:

    БоГ, с модификаторами знакомы? Например, "U" от слова "ungreedy" . Все прекрасно работает для текстовой строки, а
    в эксперименте не было задачи построить суперуниверсальный шаблон для выборки хоста, даже наоборот я постарался максимально его упростить. То, что parse_url выбирает больше параметров это только в плюс… при больших операциях обгон в несколько раз.

  6. nickspring пишет:

    Парсе урл проверяет наличие логина, пароля, порта в урле… у тебя этого нет.

    угу, потому что они не обязательны по тому же RFC и для того же parse_url.

  7. Locker пишет:

    Спасибо за эксперимент, хотя даже в той кривой книге, которая служила мне самоучителем, было сказано, что ВСЕГДА нужно использовать встроенные функции вместо написания регов, поскольку реги являются скорее способом через ж..у и применять их нужно только когда другого способа нет.

  8. nickspring пишет:

    Locker, не знаю, но классический взгляд состоит в том, что регэкспы быстрей всего… так оно и есть… просто интерпретатор выполняет их дольше, чем C++ на сервере (или на чем там писан Php?).

  9. Andre пишет:

    Дак понятно. Встроенные функции всегда быстрее, чем регулярное выражение. Я имею ввиду все те встроенные функции, которые выполняют возложенную на них задачу за одно применение.

    >Locker, не знаю, но классический взгляд состоит в том, что
    > регэкспы быстрей всего… так оно и есть… просто интерпретатор
    > выполняет их >дольше, чем C++ на сервере (или на чем там писан Php?).

    PHP написан на C. Регэкспы не быстрей всего. То же самое, что может сделать регэксп, можно написать используя строковые функции и сложный анализ. Только вот кому это надо, когда есть регэкспы?

Оставьте комментарий

Уважаемые SEOш... спамеры! Ссылки в комментариях в теге «noindex» и с атрибутом «nofollow». Пишите, пожалуйста, по делу.

Присылать комментарии на