[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