Last active
September 30, 2016 10:34
-
-
Save jef-sure/ef8849e6abbeb9b8aac74c71389886f7 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
use Benchmark qw(:all); | |
use Storable; | |
use Clone; | |
use CBOR::XS; | |
use Data::MessagePack; | |
use Panda::Lib; | |
use Sereal; | |
use Sereal::Dclone; | |
use Data::Clone; | |
use feature 'state'; | |
my %config = ( | |
group => { | |
item1 => { | |
foo => 'value', | |
bar => 'value', | |
}, | |
item2 => { | |
foo => 'value', | |
bar => 'value', | |
}, | |
item3 => { | |
foo => 'value', | |
bar => 'value', | |
}, | |
item4 => { | |
foo => 'value', | |
bar => 'value', | |
}, | |
item5 => { | |
foo => 'value', | |
bar => 'value', | |
}, | |
item6 => { | |
foo => 'value', | |
bar => 'value', | |
}, | |
item7 => { | |
foo => 'value', | |
bar => 'value', | |
}, | |
item8 => { | |
foo => 'value', | |
bar => 'value', | |
}, | |
item9 => { | |
foo => 'value', | |
bar => 'value', | |
}, | |
item10 => { | |
foo => 'value', | |
bar => 'value', | |
}, | |
item11 => { | |
foo => 'value', | |
bar => {data => {map {$_ => 1} 1 .. 1000}}, | |
}, | |
}, | |
); | |
sub cbor_clone { | |
state $cbor = CBOR::XS->new; | |
$cbor->decode($cbor->encode($_[0])); | |
} | |
sub dmp_clone { | |
state $mp = Data::MessagePack->new; | |
$mp->decode($mp->encode($_[0])); | |
} | |
sub sereal_clone { | |
state $dec = Sereal::Decoder->new; | |
state $enc = Sereal::Encoder->new; | |
$dec->decode($enc->encode($_[0])); | |
} | |
sub sereal_dclone {Sereal::Dclone::dclone($_[0])} | |
sub storable_clone {Storable::dclone($_[0])} | |
sub clone_clone {Clone::clone($_[0])} | |
sub data_clone {Data::Clone::clone($_[0])} | |
sub panda_clone {Panda::Lib::lclone($_[0])} | |
sub panda_fclone {Panda::Lib::fclone($_[0])} | |
cmpthese( | |
-2, | |
{ clone_clone => sub {clone_clone(\%config)}, | |
data_clone => sub {data_clone(\%config)}, | |
cbor_clone => sub {cbor_clone(\%config)}, | |
storable_clone => sub {storable_clone(\%config)}, | |
dmp_clone => sub {dmp_clone(\%config)}, | |
panda_clone => sub {panda_clone(\%config)}, | |
panda_fclone => sub {panda_fclone(\%config)}, | |
sereal_clone => sub {sereal_clone(\%config)}, | |
sereal_dclone => sub {sereal_dclone(\%config)}, | |
} | |
); | |
=pod | |
Rate dmp_clone clone_clone storable_clone sereal_clone data_clone cbor_clone sereal_dclone panda_fclone panda_clone | |
dmp_clone 1292/s -- -21% -64% -68% -71% -71% -79% -81% -82% | |
clone_clone 1626/s 26% -- -55% -60% -63% -64% -73% -77% -77% | |
storable_clone 3584/s 177% 120% -- -11% -19% -20% -41% -49% -49% | |
sereal_clone 4030/s 212% 148% 12% -- -8% -10% -34% -42% -43% | |
data_clone 4399/s 240% 171% 23% 9% -- -2% -28% -37% -38% | |
cbor_clone 4502/s 248% 177% 26% 12% 2% -- -26% -36% -36% | |
sereal_dclone 6075/s 370% 274% 70% 51% 38% 35% -- -13% -14% | |
panda_fclone 6981/s 440% 329% 95% 73% 59% 55% 15% -- -1% | |
panda_clone 7041/s 445% 333% 96% 75% 60% 56% 16% 1% -- | |
=cut |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment