… | |
… | |
938 | directly when available (so will be 100% compatible with it, including |
938 | directly when available (so will be 100% compatible with it, including |
939 | speed), or it uses JSON::PP, which is basically JSON::XS translated to |
939 | speed), or it uses JSON::PP, which is basically JSON::XS translated to |
940 | Pure Perl, which should be 100% compatible with JSON::XS, just a bit |
940 | Pure Perl, which should be 100% compatible with JSON::XS, just a bit |
941 | slower. |
941 | slower. |
942 | |
942 | |
943 | You cannot really lose by using this module. |
943 | You cannot really lose by using this module, especially as it tries very |
|
|
944 | hard to work even with ancient Perl versions, while JSON::XS does not. |
944 | |
945 | |
945 | =item JSON 1.07 |
946 | =item JSON 1.07 |
946 | |
947 | |
947 | Slow (but very portable, as it is written in pure Perl). |
948 | Slow (but very portable, as it is written in pure Perl). |
948 | |
949 | |
… | |
… | |
1080 | It seems that JSON::XS is surprisingly fast, as shown in the following |
1081 | It seems that JSON::XS is surprisingly fast, as shown in the following |
1081 | tables. They have been generated with the help of the C<eg/bench> program |
1082 | tables. They have been generated with the help of the C<eg/bench> program |
1082 | in the JSON::XS distribution, to make it easy to compare on your own |
1083 | in the JSON::XS distribution, to make it easy to compare on your own |
1083 | system. |
1084 | system. |
1084 | |
1085 | |
1085 | First comes a comparison between various modules using a very short |
1086 | First comes a comparison between various modules using |
1086 | single-line JSON string: |
1087 | a very short single-line JSON string (also available at |
|
|
1088 | L<http://dist.schmorp.de/misc/json/long.json>). |
1087 | |
1089 | |
1088 | {"method": "handleMessage", "params": ["user1", "we were just talking"], \ |
1090 | {"method": "handleMessage", "params": ["user1", "we were just talking"], \ |
1089 | "id": null, "array":[1,11,234,-5,1e5,1e7, true, false]} |
1091 | "id": null, "array":[1,11,234,-5,1e5,1e7, true, false]} |
1090 | |
1092 | |
1091 | It shows the number of encodes/decodes per second (JSON::XS uses |
1093 | It shows the number of encodes/decodes per second (JSON::XS uses |
… | |
… | |
1110 | about three times faster on decoding, and over forty times faster |
1112 | about three times faster on decoding, and over forty times faster |
1111 | than JSON, even with pretty-printing and key sorting. It also compares |
1113 | than JSON, even with pretty-printing and key sorting. It also compares |
1112 | favourably to Storable for small amounts of data. |
1114 | favourably to Storable for small amounts of data. |
1113 | |
1115 | |
1114 | Using a longer test string (roughly 18KB, generated from Yahoo! Locals |
1116 | Using a longer test string (roughly 18KB, generated from Yahoo! Locals |
1115 | search API (http://nanoref.com/yahooapis/mgPdGg): |
1117 | search API (L>http://dist.schmorp.de/misc/json/long.json>). |
1116 | |
1118 | |
1117 | module | encode | decode | |
1119 | module | encode | decode | |
1118 | -----------|------------|------------| |
1120 | -----------|------------|------------| |
1119 | JSON 1.x | 55.260 | 34.971 | |
1121 | JSON 1.x | 55.260 | 34.971 | |
1120 | JSON::DWIW | 825.228 | 1082.513 | |
1122 | JSON::DWIW | 825.228 | 1082.513 | |
… | |
… | |
1162 | to free the temporary). If that is exceeded, the program crashes. To be |
1164 | to free the temporary). If that is exceeded, the program crashes. To be |
1163 | conservative, the default nesting limit is set to 512. If your process |
1165 | conservative, the default nesting limit is set to 512. If your process |
1164 | has a smaller stack, you should adjust this setting accordingly with the |
1166 | has a smaller stack, you should adjust this setting accordingly with the |
1165 | C<max_depth> method. |
1167 | C<max_depth> method. |
1166 | |
1168 | |
1167 | And last but least, something else could bomb you that I forgot to think |
1169 | Something else could bomb you, too, that I forgot to think of. In that |
1168 | of. In that case, you get to keep the pieces. I am always open for hints, |
1170 | case, you get to keep the pieces. I am always open for hints, though... |
1169 | though... |
1171 | |
|
|
1172 | Also keep in mind that JSON::XS might leak contents of your Perl data |
|
|
1173 | structures in its error messages, so when you serialise sensitive |
|
|
1174 | information you might want to make sure that exceptions thrown by JSON::XS |
|
|
1175 | will not end up in front of untrusted eyes. |
1170 | |
1176 | |
1171 | If you are using JSON::XS to return packets to consumption |
1177 | If you are using JSON::XS to return packets to consumption |
1172 | by JavaScript scripts in a browser you should have a look at |
1178 | by JavaScript scripts in a browser you should have a look at |
1173 | L<http://jpsykes.com/47/practical-csrf-and-json-security> to see whether |
1179 | L<http://jpsykes.com/47/practical-csrf-and-json-security> to see whether |
1174 | you are vulnerable to some common attack vectors (which really are browser |
1180 | you are vulnerable to some common attack vectors (which really are browser |