[Moscow.pm] Не думал что регулярные выражения настолько быстры (или substr такой медленный...)
Ruslan Zakirov
ruslan.zakirov на gmail.com
Ср Дек 24 10:20:08 PST 2008
Нужно просто понимать где второй вариант тратит время:
my $vs = {
regex => sub {
if ( $phone =~ /^7/ ) { }
},
substr => sub {
if ( substr($phone, 0, 1) eq '7' ) { }
},
rindex => sub {
if ( rindex($phone, '7', 0) == 0 ) { }
},
};
Rate regex rindex substr
regex 1805233/s -- -39% -40%
rindex 2964852/s 64% -- -1%
substr 2991476/s 66% 1% --
rindex привиден для более общего случая функции is_prefix($string,
$prefix), где нужно еще считать длинну префикса при использовании
substr.
2008/12/24 Denis Evdokimov <evdokimov.denis на gmail.com>:
> Мне всегда казалось, что регулярки - удобный, но не быстрый инструмент.
> И когда я написал в коде
> if ( $phone =~ /^7/ )
> Мне в голову пришла мысль, а не будет ли гораздо ли быстрее
> if ( substr( $phone, 0, 1 ) == 7 )
> глянув на эту строчку я немного поморщился из-за потери читабельности, что и
> побудило меня провести тест "Сколько мне стоит читабельность кода"
> Результаты теста меня просто шокировали.
> Собственно своим хорошим настроением я и делюсь.
>
>
> use strict;
> use warnings;
> use Benchmark qw(:all);
>
> my $phone = '70123456789';
> my $vs = {
> regex => sub {
> if ( $phone =~ /^7/ ) { }
> },
> substr => sub {
> if ( substr( $phone, 0, 1 ) == 7 ) { }
> },
>
> };
> cmpthese - 5, $vs;
>
> __END__
>
> Rate substr regex
> substr 3867126/s -- -21%
> regex 4887480/s 26% --
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>
--
Best regards, Ruslan.
Подробная информация о списке рассылки Moscow-pm