-
-
Save knutov/6e98f12f76b4e18588a701bbf89b7426 to your computer and use it in GitHub Desktop.
This file contains hidden or 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