=head1 NAME FU::Benchmarks - A bunch of automated benchmark results. =head1 DESCRIPTION This file is automatically generated from 'bench.PL' in the L distribution. These benchmarks compare performance of some FU functionality against similar modules found on CPAN. B Obtaining accurate measurements is notoriously hard. Take the numbers below with a few buckets of salt, any difference below 10% is most likely noise. B Goodhart's law: "When a measure becomes a target, it ceases to be a good measure". I've used these benchmarks to find and optimize hotspots in FU, which in turn means these numbers may look better than they are in real-world use. B Many of these benchmarks exists solely to test edge case performance, these numbers are not representative for real-world use. =head1 MODULE VERSIONS The following module versions were used: =over =item L 4.40 =item L 3.18.0 =item L 1.4 =item L 1.08 =item L 4.16 =item L 1.07 =item L 0.58 =item L 4.04 =item L 0.15 =item L 1.6 =item L 0.900 =back =head1 BENCHMARKS =head2 JSON Parsing & Formatting These benchmarks run on large-ish arrays with repeated values. JSON encoding is sufficiently fast that Perl function calling overhead tends to dominate for smaller inputs, but I don't find that overhead very interesting. Also worth noting that L formatting code is forked from L, the SIMD parts are only used for parsing. API object from L documentation. Encode Canonical Decode JSON::PP 5136/s 4943/s 1240/s JSON::Tiny 7617/s - 3474/s Cpanel::JSON::XS 108128/s 98734/s 105811/s JSON::SIMD 125105/s 114822/s 118410/s JSON::XS 128749/s 117518/s 120190/s FU::Util 126909/s 109166/s 113983/s Object (small) Encode Canonical Decode JSON::PP 896/s 826/s 194/s JSON::Tiny 1216/s - 519/s Cpanel::JSON::XS 44184/s 28190/s 19449/s JSON::SIMD 52633/s 31157/s 23587/s JSON::XS 50314/s 34276/s 25294/s FU::Util 42121/s 25618/s 19203/s Object (large) Encode Canonical Decode JSON::PP 910/s 734/s 98/s JSON::Tiny 1068/s - 404/s Cpanel::JSON::XS 27626/s 12484/s 15333/s JSON::SIMD 34106/s 12808/s 23674/s JSON::XS 35738/s 13099/s 22637/s FU::Util 37663/s 13366/s 16292/s Object (large, mixed unicode) Encode Canonical Decode JSON::PP 835/s 664/s 82/s JSON::Tiny 1028/s - 427/s Cpanel::JSON::XS 24123/s 1352/s 8694/s JSON::SIMD 26008/s 1413/s 19707/s JSON::XS 25444/s 1391/s 10442/s FU::Util 33132/s 12006/s 11861/s Small integers Encode Decode JSON::PP 116/s 30/s JSON::Tiny 158/s 86/s Cpanel::JSON::XS 7426/s 5774/s JSON::SIMD 8294/s 4375/s JSON::XS 8526/s 6179/s FU::Util 7996/s 5962/s Large integers Encode Decode JSON::PP 2213/s 341/s JSON::Tiny 2910/s 1661/s Cpanel::JSON::XS 32616/s 53053/s JSON::SIMD 37749/s 53032/s JSON::XS 38644/s 55004/s FU::Util 109930/s 63358/s ASCII strings Encode Decode JSON::PP 2811/s 312/s JSON::Tiny 3924/s 1506/s Cpanel::JSON::XS 129468/s 51536/s JSON::SIMD 140393/s 64499/s JSON::XS 141149/s 56913/s FU::Util 165938/s 55034/s Unicode strings Encode Decode JSON::PP 5138/s 248/s JSON::Tiny 6501/s 2677/s Cpanel::JSON::XS 91004/s 64101/s JSON::SIMD 101185/s 80941/s JSON::XS 106312/s 61104/s FU::Util 205716/s 52041/s String escaping (few) Encode Decode JSON::PP 4269/s 329/s JSON::Tiny 4878/s 2101/s Cpanel::JSON::XS 152958/s 105597/s JSON::SIMD 165340/s 130074/s JSON::XS 165863/s 87872/s FU::Util 228511/s 81599/s String escaping (many) Encode Decode JSON::PP 4052/s 573/s JSON::Tiny 4575/s 2274/s Cpanel::JSON::XS 201958/s 102800/s JSON::SIMD 242806/s 146341/s JSON::XS 209689/s 98420/s FU::Util 210713/s 100255/s =head2 XML Writing L is the only XS-based XML DSL that I'm aware of, so all direct competition is inherently slower by virtue of being pure perl. I'm sure some templating modules will perform better, though. HTML fragment TUWF::XML 787/s XML::Writer 832/s HTML::Tiny 403/s FU::XMLWriter 5192/s =head2 PostgreSQL client Fetching query results is highly unlikely to be a bottleneck in your code, this benchmark is mainly here to verify that L is not introducing a bottleneck where there shouldn't be one. Fetch and bitwise-or 20k integers Smallint Bigint DBD::Pg 346/s 33/s Pg::PQ 270/s 24/s FU::Pg (bin) 476/s 46/s FU::Pg (text) 273/s 23/s =cut # Cached data used by bench.PL. Same as the formatted tables above but easier to parse. json/api Canonical Cpanel::JSON::XS 98734 json/api Canonical FU::Util 109166 json/api Canonical JSON::PP 4943 json/api Canonical JSON::SIMD 114822 json/api Canonical JSON::XS 117518 json/api Decode Cpanel::JSON::XS 105811 json/api Decode FU::Util 113983 json/api Decode JSON::PP 1240 json/api Decode JSON::SIMD 118410 json/api Decode JSON::Tiny 3474 json/api Decode JSON::XS 120190 json/api Encode Cpanel::JSON::XS 108128 json/api Encode FU::Util 126909 json/api Encode JSON::PP 5136 json/api Encode JSON::SIMD 125105 json/api Encode JSON::Tiny 7617 json/api Encode JSON::XS 128749 json/intl Decode Cpanel::JSON::XS 53053 json/intl Decode FU::Util 63358 json/intl Decode JSON::PP 341 json/intl Decode JSON::SIMD 53032 json/intl Decode JSON::Tiny 1661 json/intl Decode JSON::XS 55004 json/intl Encode Cpanel::JSON::XS 32616 json/intl Encode FU::Util 109930 json/intl Encode JSON::PP 2213 json/intl Encode JSON::SIMD 37749 json/intl Encode JSON::Tiny 2910 json/intl Encode JSON::XS 38644 json/ints Decode Cpanel::JSON::XS 5774 json/ints Decode FU::Util 5962 json/ints Decode JSON::PP 30 json/ints Decode JSON::SIMD 4375 json/ints Decode JSON::Tiny 86 json/ints Decode JSON::XS 6179 json/ints Encode Cpanel::JSON::XS 7426 json/ints Encode FU::Util 7996 json/ints Encode JSON::PP 116 json/ints Encode JSON::SIMD 8294 json/ints Encode JSON::Tiny 158 json/ints Encode JSON::XS 8526 json/objl Canonical Cpanel::JSON::XS 12484 json/objl Canonical FU::Util 13366 json/objl Canonical JSON::PP 734 json/objl Canonical JSON::SIMD 12808 json/objl Canonical JSON::XS 13099 json/objl Decode Cpanel::JSON::XS 15333 json/objl Decode FU::Util 16292 json/objl Decode JSON::PP 98 json/objl Decode JSON::SIMD 23674 json/objl Decode JSON::Tiny 404 json/objl Decode JSON::XS 22637 json/objl Encode Cpanel::JSON::XS 27626 json/objl Encode FU::Util 37663 json/objl Encode JSON::PP 910 json/objl Encode JSON::SIMD 34106 json/objl Encode JSON::Tiny 1068 json/objl Encode JSON::XS 35738 json/objs Canonical Cpanel::JSON::XS 28190 json/objs Canonical FU::Util 25618 json/objs Canonical JSON::PP 826 json/objs Canonical JSON::SIMD 31157 json/objs Canonical JSON::XS 34276 json/objs Decode Cpanel::JSON::XS 19449 json/objs Decode FU::Util 19203 json/objs Decode JSON::PP 194 json/objs Decode JSON::SIMD 23587 json/objs Decode JSON::Tiny 519 json/objs Decode JSON::XS 25294 json/objs Encode Cpanel::JSON::XS 44184 json/objs Encode FU::Util 42121 json/objs Encode JSON::PP 896 json/objs Encode JSON::SIMD 52633 json/objs Encode JSON::Tiny 1216 json/objs Encode JSON::XS 50314 json/obju Canonical Cpanel::JSON::XS 1352 json/obju Canonical FU::Util 12006 json/obju Canonical JSON::PP 664 json/obju Canonical JSON::SIMD 1413 json/obju Canonical JSON::XS 1391 json/obju Decode Cpanel::JSON::XS 8694 json/obju Decode FU::Util 11861 json/obju Decode JSON::PP 82 json/obju Decode JSON::SIMD 19707 json/obju Decode JSON::Tiny 427 json/obju Decode JSON::XS 10442 json/obju Encode Cpanel::JSON::XS 24123 json/obju Encode FU::Util 33132 json/obju Encode JSON::PP 835 json/obju Encode JSON::SIMD 26008 json/obju Encode JSON::Tiny 1028 json/obju Encode JSON::XS 25444 json/strel Decode Cpanel::JSON::XS 102800 json/strel Decode FU::Util 100255 json/strel Decode JSON::PP 573 json/strel Decode JSON::SIMD 146341 json/strel Decode JSON::Tiny 2274 json/strel Decode JSON::XS 98420 json/strel Encode Cpanel::JSON::XS 201958 json/strel Encode FU::Util 210713 json/strel Encode JSON::PP 4052 json/strel Encode JSON::SIMD 242806 json/strel Encode JSON::Tiny 4575 json/strel Encode JSON::XS 209689 json/stres Decode Cpanel::JSON::XS 105597 json/stres Decode FU::Util 81599 json/stres Decode JSON::PP 329 json/stres Decode JSON::SIMD 130074 json/stres Decode JSON::Tiny 2101 json/stres Decode JSON::XS 87872 json/stres Encode Cpanel::JSON::XS 152958 json/stres Encode FU::Util 228511 json/stres Encode JSON::PP 4269 json/stres Encode JSON::SIMD 165340 json/stres Encode JSON::Tiny 4878 json/stres Encode JSON::XS 165863 json/strs Decode Cpanel::JSON::XS 51536 json/strs Decode FU::Util 55034 json/strs Decode JSON::PP 312 json/strs Decode JSON::SIMD 64499 json/strs Decode JSON::Tiny 1506 json/strs Decode JSON::XS 56913 json/strs Encode Cpanel::JSON::XS 129468 json/strs Encode FU::Util 165938 json/strs Encode JSON::PP 2811 json/strs Encode JSON::SIMD 140393 json/strs Encode JSON::Tiny 3924 json/strs Encode JSON::XS 141149 json/stru Decode Cpanel::JSON::XS 64101 json/stru Decode FU::Util 52041 json/stru Decode JSON::PP 248 json/stru Decode JSON::SIMD 80941 json/stru Decode JSON::Tiny 2677 json/stru Decode JSON::XS 61104 json/stru Encode Cpanel::JSON::XS 91004 json/stru Encode FU::Util 205716 json/stru Encode JSON::PP 5138 json/stru Encode JSON::SIMD 101185 json/stru Encode JSON::Tiny 6501 json/stru Encode JSON::XS 106312 pg/ints Bigint DBD::Pg 33 pg/ints Bigint FU::Pg (bin) 46 pg/ints Bigint FU::Pg (text) 23 pg/ints Bigint Pg::PQ 24 pg/ints Smallint DBD::Pg 346 pg/ints Smallint FU::Pg (bin) 476 pg/ints Smallint FU::Pg (text) 273 pg/ints Smallint Pg::PQ 270 xml/a Rate FU::XMLWriter 5192 xml/a Rate HTML::Tiny 403 xml/a Rate TUWF::XML 787 xml/a Rate XML::Writer 832