По-моему это любимый вопрос начинающего разработчика "что быстрее". В простейшем случае, ответ однозначен. strpos() быстрее stripos(), а тот в свою очередь быстрее preg_match().
А если требуется проверить длинную строку, на наличие одного из нескольких слов? Т.е. фактически будет выполняться многократный strpos()|stripos() в цикле и однократный preg_match() ? Данный эксперимент я поставил на нескольких разных серверах. Несколько тысяч файлов проверялись, на наличие нескольких слов из словаря. В словаре 13 слов. Причем регистр, был несущественным, поэтому по сути тестировалось strpos()+strtolower() vs stripos() vs preg_match()
1 2 3 4 5 6 7 8 9 10 |
$s = file_get_contents($f); return preg_match(PREG_SCAN_SIGN_CASE, $s); $s = strtolower(file_get_contents($f)); foreach ($aSign as $sSign) if (strpos($s, $sSign) !== false) return 1; return 0; $s = file_get_contents($f); foreach ($aSign as $sSign) if (stripos($s, $sSign) !== false) return 1; return 0; |
Привожу результаты. Первый результат с моего домашнего компа. Второй с хостинга на Инфобоксе. Третий с сервера клиента. Тестировал по много раз, но дабы не загромождать, привожу типичные результаты.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
(Windows)Файлов:7533 PregS 9.8446 StrS 18.2740 StrSi 28.2926 Файлов:8777 PregS 2.5858 StrS 1.1235 StrSi 2.0603 Файлов:9604 PregS 2.4020 StrS 0.6015 StrSi 1.4312 |
preg_match() выиграл только на моей домашней машине. В остальных случаях strpos()+strtolower() всегда оказывался минимум в 2 раза быстрее. stripos() в серединке.
Свежие комментарии