[Moscow.pm] Интересное о Encode.pm
Vladimir V. Perepelitsa
inthrax на gmail.com
Чт Фев 21 01:59:44 PST 2008
Я продемонстрирую более интересный вариант:
=============
use utf8;
use Encode;
use Benchmark qw(:hireswallclock);
our $u = "\x{442}\x{435}\x{441}\x{442}";
our $s = $u; utf8::encode($s);
timethese(1_000_000,{
'decode' => sub { my $x = Encode::decode('utf8', $s); },
'decode_utf8' => sub { my $x = Encode::decode_utf8($s); },
'utf8::decode' => sub { my $x = $s; utf8::decode($x); },
});
=============
Benchmark: timing 1000000 iterations of decode, decode_utf8, utf8::decode...
decode: 32.944 wallclock secs (30.80 usr + 0.28 sys = 31.08 CPU) @
32175.03/s (n=1000000)
decode_utf8: 40.7328 wallclock secs (36.25 usr + 0.37 sys = 36.62 CPU) @
27307.48/s (n=1000000)
utf8::decode: 1.42072 wallclock secs ( 1.33 usr + 0.03 sys = 1.36 CPU) @
735294.12/s (n=1000000)
On Monday 18 February 2008 18:52, Sergey Homenkow wrote:
> Приветствую!
>
> Для поднятия трафика и расширения кругозора предлагаю публиковать
> "интересные факты о...".
>
> А то все молчат как партизаны и не рассказывают о всяких интересных вещах
> (например perl -e 'print a$->{b}').
>
> В Encode.pm есть функции (encode|decode)_utf8.
> По доке "Equivalent to $octets = encode("utf8", $string);", по факту
> работают через utf8::(decode|encode).
>
> Сравниваем их с (encode|decode) ('utf8', ...):
>
> =====
> use utf8;
> use Encode;
> use Benchmark qw(:hireswallclock);
>
> my $s_U = "Привет!";
> my $s = encode_utf8($s_U);
>
> timethese(1000000, {
> decode_w_param => sub { decode('utf8', $s) },
> decode_utf8 => sub { decode_utf8( $s) },
> });
>
> timethese(1000000, {
> encode_w_param => sub { encode('utf8', $s_U) },
> encode_utf8 => sub { encode_utf8( $s_U) },
> });
> =====
>
>
> Benchmark: timing 1000000 iterations of decode_utf8, decode_w_param...
> decode_utf8: 7.97996 wallclock secs ( 7.98 usr + 0.00 sys = 7.98 CPU) @
> 125367.29/s (n=1000000) decode_w_param: 7.02113 wallclock secs ( 7.02 usr +
> 0.00 sys = 7.02 CPU) @ 142538.98/s (n=1000000) Benchmark: timing 1000000
> iterations of encode_utf8, encode_w_param... encode_utf8: 0.946596
> wallclock secs ( 0.95 usr + 0.00 sys = 0.95 CPU) @ 1057851.24/s
> (n=1000000) encode_w_param: 5.20548 wallclock secs ( 5.20 usr + 0.00 sys =
> 5.20 CPU) @ 192481.20/s (n=1000000)
>
> decode('utf8', ...) на 16% быстрее decode_utf8(...).
>
> encode('utf8', ...) в 5.5 раз медленее encode_utf8(...).
>
> ______________________________________________________________________
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
> http://mail.pm.org/mailman/listinfo/moscow-pm
Подробная информация о списке рассылки Moscow-pm