понедельник, 28 марта 2011 г.

Mojoliciuos - Производительность Mojo::JSON

Mojo::JSON VS JSON::PP
Решил проверить производительность Mojo::JSON
Интересовала, естественно, производительность в сравнении с JSON::PP.
Колоссальная производительность JSON::XS лишает смысла сравнивать его с перловыми реализациями.

Результаты
Тестирование показало, что Mojo::JSON в 1.5 раза быстрее чем JSON::PP при сериализации и в почти в 3 раза быстрее при десериализации. Очень даже неплохо.
Естественно, JSON::XS вне конкуренции, он в 40 раз быстрее чем Mojo::JSON при сериализации и в 30 раз быстрее при десериализации.

Если мы посмотрим на абсолютные цифры производительности Mojo::JSON, то 3-5 тыс вызовов в секунду хватит для большинства проектов. Кроме того, в тесте использовалась достаточно сложная структура данных.  Ну и всегда можно переключится на JSON::XS


Rate   json_pp_encode mojo_json_encode   json_xs_encode
json_pp_encode     3724/s               --             -33%             -98%
mojo_json_encode   5581/s              50%               --             -98%
json_xs_encode   239761/s            6339%            4196%               --

                    Rate   json_pp_decode mojo_json_decode   json_xs_decode
json_pp_decode    1315/s               --             -58%             -99%
mojo_json_decode  3150/s             140%               --             -97%
json_xs_decode   99643/s            7479%            3064%               --


Далее исходник теста
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark 'cmpthese';
use Mojo::JSON;
use JSON;
use JSON::XS;
use JSON::PP;

my $mojo_json   = Mojo::JSON->new;
my $json_xs     = JSON::XS->new();
my $json_pp     = JSON::PP->new();

my $hashref = {'aaaa'..'aaaz', qq =>[1..50, {'aaaa'..'aaaf'}]};
my $string = $json_xs->encode($hashref);

sub mojo_json_encode {
    $mojo_json->encode($hashref);
}

sub json_xs_encode {
    $json_xs->encode($hashref);
}

sub json_pp_encode {
    $json_pp->encode($hashref);
}

sub mojo_json_decode {
    $mojo_json->decode($string);
}

sub json_xs_decode {
    $json_xs->decode($string);
}

sub json_pp_decode {
    $json_pp->decode($string);
}

cmpthese(-2, {
    mojo_json_encode => \&mojo_json_encode, 
    json_xs_encode   => \&json_xs_encode,
    json_pp_encode   => \&json_pp_encode
});


cmpthese(-2, {
    mojo_json_decode => \&mojo_json_decode, 
    json_xs_decode   => \&json_xs_decode,
    json_pp_decode   => \&json_pp_decode
});

4 коммент.:

alienator комментирует...

В помощь:
http://search.cpan.org/perldoc?Benchmark::Serialize

koorchik комментирует...

2alienator:
Я в курсе, даже в начале поста дал ссылку на свой старый пост, с результатами Benchmark::Serialize. :)

Анонимный комментирует...

s/MOJO::PP/JSON::PP/

koorchik комментирует...

спасибо, исправил.

Отправить комментарий

Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)