ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/JSON-XS/eg/bench
(Generate patch)

Comparing JSON-XS/eg/bench (file contents):
Revision 1.6 by root, Sat Mar 24 22:55:16 2007 UTC vs.
Revision 1.16 by root, Tue Aug 28 02:06:06 2007 UTC

1#!/opt/bin/perl 1#!/opt/bin/perl
2 2
3# Usage: bench json-file 3# Usage: bench json-file
4 4
5# which modules to test (JSON usually excluded because its so slow)
6my %tst = (
7# "JSON" => ['JSON::objToJson $perl' , 'JSON::jsonToObj $json'],
8# "JSON::PP" => ['$pp->encode ($perl)' , '$pp->decode ($json)'],
9 "JSON::DWIW" => ['$dwiw->to_json ($perl)' , '$dwiw->from_json ($json)'],
10# "JSON::PC" => ['$pc->convert ($perl)' , '$pc->parse ($json)'],
11 "JSON::Syck" => ['JSON::Syck::Dump $perl' , 'JSON::Syck::Load $json'],
12 "JSON::XS" => ['to_json $perl' , 'from_json $json'],
13 "JSON::XS/2" => ['$xs2->encode ($perl)' , '$xs2->decode ($json)'],
14 "JSON::XS/3" => ['$xs3->encode ($perl)' , '$xs3->decode ($json)'],
15 "Storable" => ['Storable::nfreeze $perl' , 'Storable::thaw $pst'],
16);
17
5use JSON; 18use JSON ();
6use JSON::DWIW; 19use JSON::DWIW;
7use JSON::PC; 20use JSON::PC;
8use JSON::XS; 21use JSON::PP ();
22use JSON::XS qw(to_json from_json);
9use JSON::Syck; 23use JSON::Syck;
24use Storable ();
10 25
11use Time::HiRes; 26use Time::HiRes;
12use List::Util; 27use List::Util;
13 28
14use utf8; 29use utf8;
15 30
16my $dwiw = new JSON::DWIW; 31my $dwiw = new JSON::DWIW;
17my $pc = new JSON::PC; 32my $pc = new JSON::PC;
33my $pp = JSON::PP->new->max_depth (512);
18my $xs2 = JSON::XS->new->utf8->pretty->canonical; 34my $xs2 = JSON::XS->new->utf8->pretty->canonical;
19my $xs3 = JSON::XS->new->utf8->shrink; 35my $xs3 = JSON::XS->new->utf8->shrink;
20 36
21my $json; # the test string 37my $json; # the test string
22 38
23local $/; 39local $/;
24$json = <>; 40$json = <>;
41
42# fix syck-brokenised stuff
43$json = JSON::XS->new->ascii(1)->encode (JSON::Syck::Load $json);
25 44
26#srand 0; $json = JSON::XS->new->utf8(1)->ascii(0)->encode ([join "", map +(chr rand 255), 0..2047]); 45#srand 0; $json = JSON::XS->new->utf8(1)->ascii(0)->encode ([join "", map +(chr rand 255), 0..2047]);
27 46
28#if (1) { 47#if (1) {
29# use Storable; 48# use Storable;
33# open my $fh2, ">:unix", "faces.json" or die "$!"; 52# open my $fh2, ">:unix", "faces.json" or die "$!";
34# print $fh2 $json; 53# print $fh2 $json;
35# warn length $json; 54# warn length $json;
36#} 55#}
37 56
38my %tst = (
39 "JSON" => ['objToJson $perl' , 'jsonToObj $json'],
40 "JSON::DWIW" => ['$dwiw->to_json ($perl)', '$dwiw->from_json ($json)'],
41 "JSON::PC" => ['$pc->convert ($perl)' , '$pc->parse ($json)'],
42 "JSON::Syck" => ['JSON::Syck::Dump $perl', 'JSON::Syck::Load $json'],
43 "JSON::XS" => ['to_json $perl' , 'from_json $json'],
44 "JSON::XS/2" => ['$xs2->encode ($perl)' , '$xs2->decode ($json)'],
45 "JSON::XS/3" => ['$xs3->encode ($perl)' , '$xs3->decode ($json)'],
46);
47
48sub bench($) { 57sub bench($) {
49 my ($code) = @_; 58 my ($code) = @_;
50 59
51 my $perl = jsonToObj $json; 60 my $perl = JSON::XS::from_json $json;
52 my $count = 20; 61 my $pst = Storable::nfreeze $perl;
53 my $times = 25;
54 62
55 my $cent = eval "sub { " . (join ";", ($code) x $count) . "}"; 63 my $count = 5;
64 my $times = 200;
65
66 my $cent = eval "sub { my \$t = Time::HiRes::time; " . (join ";", ($code) x $count) . "; Time::HiRes::time - \$t }";
56 $cent->(); 67 $cent->();
57 68
58 my @meas; 69 my $min = 1e99;
59 70
60 while () { 71 for (1..$times) {
61 push @meas, Time::HiRes::time;
62 $cent->(); 72 my $t = $cent->();
63 $meas[-1] = Time::HiRes::time - $meas[-1];
64 73
65 my $mean = (List::Util::sum @meas) / @meas; 74 $min = $t if $t < $min;
66 if (@meas >= $times) {
67 @meas = grep $_ > $mean * 0.9 && $_ < $mean * 1.1, @meas;
68 my @meas = grep $_ > $mean * 0.9999 && $_ < $mean * 1.1111, @meas;
69 if (@meas >= $times) {
70 return $count / $mean;
71 }
72 }
73 } 75 }
76
77 return $count / $min;
74} 78}
75 79
76printf "%-10s | %10s | %10s |\n", "module", "encode", "decode"; 80printf "%-10s | %10s | %10s |\n", "module", "encode", "decode";
77printf "-----------|------------|------------|\n"; 81printf "-----------|------------|------------|\n";
78for my $module (sort keys %tst) { 82for my $module (sort keys %tst) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines