|| разделы:: | |
|| поиск по сайту:: | |
|| реклама:: | |
|| новости почтой:: | |
Популярные статьи |
|
Hot 5 Stories |
|
|| рекомендуем:: |
|
| |
POSIX или PCRE
Здравствуйте уважаемые читатели. В данной статье я провел анализ языков регулярных выражений POSIX и PCRE.Если данная статья будет иметь успех, я с радостью
продолжу сравнение этих языков.
"PCRE(Perl Compatible Regular Expression) - регулярное выражение языка Perl. Использует аппарат недетерминированных конечных автоматов(НКА)
POSIX(Portable Operation System Interface) - переносимый интерфейс операционной системы. Использует аппарат детерминированных конечных автоматов(ДКА).
Механизмы работы анализатора сильно различаются, но это уже технические детали" - Д.Котеров, А.Костарев(PHP5).
Работал я следующим образом. Создал на Apache сервере два файла с кодом POSIX и PCRE соответственно. До запуска регулярного выражения замерял время работы скрипта,
используя функцию microtime(true)
$start=microtime(true);
//выражение
$end=microtime(true);
printf("<br>Время работы:%.8f c",$end-$start);
Конструкция чтения из файла в примере №4 может не является оптимальной, но т.к. я ее использовал как для POSIX, так и для PCRE разницы особой нету.
|
1.Опыт первый. Проверим скорость работы на поиск искомого значения в строке.
1.1) POSIX
eregi("big","You are my big friend",$pockets);
print_r($pockets);
//Результат колеблется от 0.00008988сек. до 0.00005007сек.
1.2) PCRE
preg_match("/big/","You are my big friend",$pockets);
print_r($pockets);
//Результат от 0.00006008сек до 0.00005698 cек
Результат: при использовании языка POSIX время работы скрипта колеблется с большим диапазоном, в то время как время работы
PCRE более стабильнее.
|
2.Опыт второй. Проверим скорость работы при замене искомого значения в строке.
2.1) POSIX
$str=eregi_replace("are","@","You are my big friend");
print($str);
//Время от 0.00002193сек до 0.00002313 сек.
2.2) PCRE
$str=preg_replace("/are/","@","You are my big friend");
print($str);
//Время от 0.00002098cек. до 0.00002193cек.
Результат: в данном примере PCRE сработал быстрее нежели POSIX.
|
3.Опыт третий. Замена даты формата(гггг-мм-дд) в формат(дд.мм.гггг)
3.1) POSIX
$date="2007-03-05";
$str=eregi_replace("([0-9]{4})-([0-9]{2})-([0-9]{2})","\3.\2.\1",$date);
echo $str;
//Время от 0.00003314cек. до 0.00003600cек.
3.2) PCRE
$date="2007-03-05";
$str=preg_replace("/(d{4})-(d{2})-(d{2})/","$3.$2.$1",$date);
echo $str;
//Время от 0.00002599cек. до 0.00002694cек.
Результат: и в данном примере PCRE показывает себя с лучшей стороны.
|
4.Опыт четвертый. Сейчас мы проверим скорость работы с большими файлами.В файл sr.txt запишем следующие предложения "
Я приехал в деревню к бабушке. Меня там встретили очень хорошо. У бабушки есть мыло babka@mail.ru
Бабушкин e-mail похож на мой krutoi@mail.ru .У моих друзей тоже свои адреса: dinko@lamer.ru, kon@yandex.com и другие."
неопределенное количество раз(у меня около 50раз).
4.1) POSIX
$file=file("sr.txt");
foreach($file as $key=>$val)
{
$val=eregi_replace("([A-Za-z0-9]{2,}@[A-Za-z0-9]{2,}.[a-z]{2,3})","<a href=mailto:\0>\0</a>",$val);
echo $val,"<br>";
}
//Время:0.01098394cек. и больше
//Удвоил размер файла, результат:0.02239799cек.
4.2) PCRE
$file=file("sr.txt");
foreach($file as $key=>$val)
{
$val=preg_replace("/(w+)@(w+).(w{2,3})/","<a href=mailto:$0>$0</a>",$val);
echo $val,"<br>";
}
//Время от 0.00658989cек. до 00693202cек.
//Удвоил размер файла, результат:0.01370597сек.
Результат: При работе с большими файлами PCRE отбирает очко у POSIX и вырывается вперед.
|
Вывод: При работе с большими ресурсами используйте язык PCRE, а в остальных случаях на ваш выбор, но по-моему факты в пользу PCRE на лицо.
|
::::: Alex пишет 24.05.2007 @ 19:21 | |
Я бы первые три опыта делал в цикле несколько сот раз и усреднял. Был бы меньше разброс значений. Правда PCRE компилирует шаблоны и последующие вызовы делаются намного быстрее...
|
Интересно, да. Просто со вкусом и на примерах.
|
::::: Samson пишет 29.07.2007 @ 00:44 | |
Профанация.
Автор пытается приводить "точные числовые значения", но при этом не приводит расчёт погрешностей и, похоже, даже не догадывается о необходимости округления. И, не зная погрешностей -- пытается сравнивать и делать какие-то выводы!!
Без оценки погрешностей (да ещё и с таким большим разбросом, порою до 80%!) никакие сравнения и выводы -- попросту невозможны.
Подобные признаки заставляют задуматься об уровне компетентности автора...
|
|
В принципе, эти тесты всё равно очень относительны. Скорость выполнения может зависить от многих факторов: ОС, свободных ресурсов компьютера. Например, одна операция может работать быстрее, но требовать больше памяти и когда свободная память закончится, то она станет работать медленнее. Могут быть и другие факторы. Это кстати подтверждает и такой разброс значений, которые получились в результате тестов.
Статья выглядела бы несколько серьезнее, если бы были данные, на чем всё это тестировалось более подробные: параметры сервера (железа), версии используемого ПО. А заодно более подробные данные по количеству тестов, можно посчитать среднее значение, разброс (как там, математическое ожидание и дисперсия, кажется :) , или, может, это сильно заумно будет). Ну, тогда было бы проще и погрешности расчитать.
Но с выводами статьи полностью согласен, я тоже слышал, что PCRE работает как правило быстрее.
|
::::: Алексей пишет 15.09.2022 @ 13:33 | |
Всем привет! Как на счет начать зарабатывать играя в онлайн казино <a href=""> Cat казино </a>? Вы
тут будете зарабатывать гарантированно много и при этом работать всего 3-4 часа в день, не больше.
Смело переходите по ссылке, регистрируйтесь в онлайн казино Cat казино и начинайте зарабатывать
вместе с нами!
|
| |