[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: preg_replace, strpos и stristr
FatCat
Неделю маялся перелинковкой словосочетаний с поддержкой словоформ.
Не столько с алгоритмом, сколько с ресурсоемкостью: текстовый поиск внутри вложенных циклов - довольно ресурсоемкая процедура.

Как ни странно, самыми медленными оказались регулярки.
Алгоритм использования: вычленение массива слов без тегов и спецсимволов, поиск регулярками в цикле по массиву, по результатам найденных вхождений поиск по порядкому номеру слова в тексте.
Тестовые 15 блоков по 50 К текста, 20 2-3-словных словосочетаний, по 2-3 вхождения каждого словосочетания денвер обрабатывал 20 секунд.

Существенно быстрей оказался stristr.
Алгоритм использования: находим слова, выбираем между ними и проверяем, нет ли посторонних слов или недопустимых HTML-тегов.
Тот же тест обрабатывал 7 секунд.

Неожиданно быстрым оказался дополнительно вложенный цикл типа
PHP
while(!stristr(" .,\"':;!?«»“”()[]<>{}\\/%*#@+`&",substr($txt,$pos,1)))$pos++;
для нахождения конца слова.
Алгоритм "черепаший": strpos-ом находим вхождение первого слова, ползем по символу к концу слова, переползаем к началу следующего слова, по пути проверяя нет ли недопустимых тегов, заползаем на второе слово и его сверяем с неоходимым.
Несмотря на то, что появился третий уровень вложенности циклов, тест выполнен за 0.4 секунды.

Получается, что "прыжки" к подстроке при помощи stristr или strpos на самом деле на порядок медленнее, чем черепашье ползанье по строке по одному симводу...



Спустя 57 минут, 26 секунд (11.07.2009 - 02:46) kirik написал(а):
Интересно, спасибо!
Регулярки в любом случае медленнее строковых функций, только не все получится сделать строковыми.


_____________
Бесплатному сыру в дырки не заглядывают...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.