PHP поддерживает регулярные выражения стандарта POSIX/eger*/ и PERL/preg*/-ориентированные (об их различии тут - php.spb.ru/regular_expression.html). Кто из них работает быстрее?
Хочу заранее предупредить любителей Перла, чтобы не радовались: хоть перловые реги и круче пхпышных, только ничто и никто не мешает использовать в PHP перловые реги! Наверно, потому их и встроили в PHP, что уж больно тормоза большие... :-)
Итак, простейший текст. Поиск простого выражения в тексте, который состоит из многократного повторения данной статьи (получается размер переменной $text в 3 Мб).
Тест вызывает всего 1 раз, ибо реги имеют встроенное средство для кеширования результатов компиляции. Т.е. перед запуском проиходит компиляции, а повторные реги не компилируются. Это особенности регулярных выражений. Разные языки программирования в состоянии хранить разное число откомпилированных выражений, что вызывались (в порядке вызова в программе). И в данном тесте как раз нет эффекта от компиляции, т.к. функция вызывается всего один раз.
| счетчик | кол-во вызовов |
общее вpемя | сpеднее вpемя |
% от min | % от max | общее время |
| test N1 | 1 | 1.3339 | 1.3339 | 107.8% | 100.0% |
![]() | ![]() |
![]() | ![]() |
| счетчик | кол-во вызовов |
общее вpемя | сpеднее вpемя |
% от min | % от max | общее время |
| test N1 | 1 | 0.4521 | 0.4521 | 76.9% | 100.0% |
![]() | ![]() |
![]() | ![]() |
| счетчик | кол-во вызовов |
общее вpемя | сpеднее вpемя |
% от min | % от max | общее время |
| test N1 | 1 | 1.3430 | 1.3430 | 60.6% | 100.0% |
![]() | ![]() |
![]() | ![]() |
| счетчик | кол-во вызовов |
общее вpемя | сpеднее вpемя |
% от min | % от max | общее время |
| test N1 | 1 | 11.6828 | 11.6828 | 680.3% | 100.0% |
![]() | ![]() |
![]() | ![]() |
| счетчик | кол-во вызовов |
общее вpемя | сpеднее вpемя |
% от min | % от max | общее время |
| test N1 | 1 | 0.5854 | 0.5854 | 00.0% | 10.2% |
![]() | ![]() |
![]() | ![]() |
| счетчик | кол-во вызовов |
общее вpемя | сpеднее вpемя |
% от min | % от max | общее время |
| test N1 | 1 | 17.6384 | 17.6384 | 72381.4% | 100.0% |
![]() | ![]() |
![]() | ![]() |