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

Comparing JSON-XS/XS.pm (file contents):
Revision 1.47 by root, Mon Jun 25 06:57:42 2007 UTC vs.
Revision 1.50 by root, Mon Jul 2 00:29:38 2007 UTC

9 # exported functions, they croak on error 9 # exported functions, they croak on error
10 # and expect/generate UTF-8 10 # and expect/generate UTF-8
11 11
12 $utf8_encoded_json_text = to_json $perl_hash_or_arrayref; 12 $utf8_encoded_json_text = to_json $perl_hash_or_arrayref;
13 $perl_hash_or_arrayref = from_json $utf8_encoded_json_text; 13 $perl_hash_or_arrayref = from_json $utf8_encoded_json_text;
14
15 # objToJson and jsonToObj aliases to to_json and from_json
16 # are exported for compatibility to the JSON module,
17 # but should not be used in new code.
18 14
19 # OO-interface 15 # OO-interface
20 16
21 $coder = JSON::XS->new->ascii->pretty->allow_nonref; 17 $coder = JSON::XS->new->ascii->pretty->allow_nonref;
22 $pretty_printed_unencoded = $coder->encode ($perl_scalar); 18 $pretty_printed_unencoded = $coder->encode ($perl_scalar);
88use strict; 84use strict;
89 85
90our $VERSION = '1.4'; 86our $VERSION = '1.4';
91our @ISA = qw(Exporter); 87our @ISA = qw(Exporter);
92 88
93our @EXPORT = qw(to_json from_json objToJson jsonToObj); 89our @EXPORT = qw(to_json from_json);
94 90
95use Exporter; 91use Exporter;
96use XSLoader; 92use XSLoader;
97 93
98=head1 FUNCTIONAL INTERFACE 94=head1 FUNCTIONAL INTERFACE
711It shows the number of encodes/decodes per second (JSON::XS uses 707It shows the number of encodes/decodes per second (JSON::XS uses
712the functional interface, while JSON::XS/2 uses the OO interface 708the functional interface, while JSON::XS/2 uses the OO interface
713with pretty-printing and hashkey sorting enabled, JSON::XS/3 enables 709with pretty-printing and hashkey sorting enabled, JSON::XS/3 enables
714shrink). Higher is better: 710shrink). Higher is better:
715 711
712 Storable | 15779.925 | 14169.946 |
713 -----------+------------+------------+
716 module | encode | decode | 714 module | encode | decode |
717 -----------|------------|------------| 715 -----------|------------|------------|
718 JSON | 7645.468 | 4208.613 | 716 JSON | 4990.842 | 4088.813 |
719 JSON::DWIW | 40721.398 | 77101.176 | 717 JSON::DWIW | 51653.990 | 71575.154 |
720 JSON::PC | 65948.176 | 78251.940 | 718 JSON::PC | 65948.176 | 74631.744 |
721 JSON::Syck | 22844.793 | 26479.192 | 719 JSON::PP | 8931.652 | 3817.168 |
720 JSON::Syck | 24877.248 | 27776.848 |
722 JSON::XS | 388361.481 | 199728.762 | 721 JSON::XS | 388361.481 | 227951.304 |
723 JSON::XS/2 | 218453.333 | 192399.266 | 722 JSON::XS/2 | 227951.304 | 218453.333 |
724 JSON::XS/3 | 338250.323 | 192399.266 | 723 JSON::XS/3 | 338250.323 | 218453.333 |
725 Storable | 15779.925 | 14169.946 | 724 Storable | 16500.016 | 135300.129 |
726 -----------+------------+------------+ 725 -----------+------------+------------+
727 726
728That is, JSON::XS is about five times faster than JSON::DWIW on encoding, 727That is, JSON::XS is about five times faster than JSON::DWIW on encoding,
729about three times faster on decoding, and over fourty times faster 728about three times faster on decoding, and over fourty times faster
730than JSON, even with pretty-printing and key sorting. It also compares 729than JSON, even with pretty-printing and key sorting. It also compares
733Using a longer test string (roughly 18KB, generated from Yahoo! Locals 732Using a longer test string (roughly 18KB, generated from Yahoo! Locals
734search API (http://nanoref.com/yahooapis/mgPdGg): 733search API (http://nanoref.com/yahooapis/mgPdGg):
735 734
736 module | encode | decode | 735 module | encode | decode |
737 -----------|------------|------------| 736 -----------|------------|------------|
738 JSON | 254.685 | 37.665 | 737 JSON | 55.260 | 34.971 |
739 JSON::DWIW | 843.343 | 1049.731 | 738 JSON::DWIW | 825.228 | 1082.513 |
740 JSON::PC | 3602.116 | 2307.352 | 739 JSON::PC | 3571.444 | 2394.829 |
740 JSON::PP | 210.987 | 32.574 |
741 JSON::Syck | 505.107 | 787.899 | 741 JSON::Syck | 552.551 | 787.544 |
742 JSON::XS | 5747.196 | 3690.220 | 742 JSON::XS | 5780.463 | 4854.519 |
743 JSON::XS/2 | 3968.121 | 3676.634 | 743 JSON::XS/2 | 3869.998 | 4798.975 |
744 JSON::XS/3 | 6105.246 | 3662.508 | 744 JSON::XS/3 | 5862.880 | 4798.975 |
745 Storable | 4417.337 | 5285.161 | 745 Storable | 4445.002 | 5235.027 |
746 -----------+------------+------------+ 746 -----------+------------+------------+
747 747
748Again, JSON::XS leads by far (except for Storable which non-surprisingly 748Again, JSON::XS leads by far (except for Storable which non-surprisingly
749decodes faster). 749decodes faster).
750 750
802still relatively early in its development. If you keep reporting bugs they 802still relatively early in its development. If you keep reporting bugs they
803will be fixed swiftly, though. 803will be fixed swiftly, though.
804 804
805=cut 805=cut
806 806
807our $true = do { bless \(my $dummy = 1), "JSON::XS::Boolean" }; 807our $true = do { bless \(my $dummy = "1"), "JSON::XS::Boolean" };
808our $false = do { bless \(my $dummy = 0), "JSON::XS::Boolean" }; 808our $false = do { bless \(my $dummy = "0"), "JSON::XS::Boolean" };
809 809
810sub true() { $true } 810sub true() { $true }
811sub false() { $false } 811sub false() { $false }
812 812
813sub is_bool($) { 813sub is_bool($) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines