=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.39 =item L 3.18.0 =item L 1.1 =item L 1.08 =item L 4.16 =item L 1.06 =item L 0.58 =item L 4.03 =item L 0.15 =item L 1.5 =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 5312/s 5119/s 1290/s JSON::Tiny 7757/s - 3426/s Cpanel::JSON::XS 114802/s 104141/s 107274/s JSON::SIMD 130137/s 118948/s 115123/s JSON::XS 128421/s 120243/s 117940/s FU::Util 132067/s 111328/s 117781/s Object (small) Encode Canonical Decode JSON::PP 907/s 829/s 202/s JSON::Tiny 1224/s - 499/s Cpanel::JSON::XS 45732/s 30862/s 20102/s JSON::SIMD 49019/s 30699/s 23267/s JSON::XS 49814/s 31326/s 25336/s FU::Util 39684/s 24971/s 17998/s Object (large) Encode Canonical Decode JSON::PP 927/s 747/s 104/s JSON::Tiny 1108/s - 392/s Cpanel::JSON::XS 30587/s 11875/s 15515/s JSON::SIMD 24418/s 12388/s 22895/s JSON::XS 23192/s 13174/s 23553/s FU::Util 35489/s 13247/s 16571/s Object (large, mixed unicode) Encode Canonical Decode JSON::PP 817/s 679/s 86/s JSON::Tiny 1036/s - 402/s Cpanel::JSON::XS 25333/s 1459/s 7480/s JSON::SIMD 25031/s 1331/s 15997/s JSON::XS 23580/s 1375/s 8526/s FU::Util 32519/s 12488/s 9290/s Small integers Encode Decode JSON::PP 113/s 29/s JSON::Tiny 160/s 86/s Cpanel::JSON::XS 7345/s 6151/s JSON::SIMD 7963/s 4361/s JSON::XS 7915/s 6058/s FU::Util 7851/s 5828/s Large integers Encode Decode JSON::PP 2176/s 329/s JSON::Tiny 2999/s 1638/s Cpanel::JSON::XS 32545/s 50162/s JSON::SIMD 37201/s 51719/s JSON::XS 36722/s 50110/s FU::Util 109163/s 63176/s ASCII strings Encode Decode JSON::PP 2934/s 336/s JSON::Tiny 4126/s 1439/s Cpanel::JSON::XS 116721/s 44560/s JSON::SIMD 134711/s 50429/s JSON::XS 135419/s 43976/s FU::Util 162246/s 44216/s Unicode strings Encode Decode JSON::PP 5113/s 253/s JSON::Tiny 6603/s 2585/s Cpanel::JSON::XS 97039/s 67669/s JSON::SIMD 106928/s 102440/s JSON::XS 105473/s 60558/s FU::Util 201648/s 57397/s String escaping (few) Encode Decode JSON::PP 4251/s 352/s JSON::Tiny 4704/s 1869/s Cpanel::JSON::XS 136755/s 118059/s JSON::SIMD 158171/s 153692/s JSON::XS 157261/s 97676/s FU::Util 225259/s 92515/s String escaping (many) Encode Decode JSON::PP 3963/s 561/s JSON::Tiny 4463/s 2175/s Cpanel::JSON::XS 197154/s 133102/s JSON::SIMD 199955/s 152557/s JSON::XS 231905/s 125191/s FU::Util 215367/s 118073/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 795/s XML::Writer 833/s HTML::Tiny 423/s FU::XMLWriter 5327/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 194/s 22/s Pg::PQ 226/s 19/s FU::Pg (bin) 245/s 22/s FU::Pg (text) 217/s 20/s =cut # Cached data used by bench.PL. Same as the formatted tables above but easier to parse. json/api Canonical Cpanel::JSON::XS 104141 json/api Canonical FU::Util 111328 json/api Canonical JSON::PP 5119 json/api Canonical JSON::SIMD 118948 json/api Canonical JSON::XS 120243 json/api Decode Cpanel::JSON::XS 107274 json/api Decode FU::Util 117781 json/api Decode JSON::PP 1290 json/api Decode JSON::SIMD 115123 json/api Decode JSON::Tiny 3426 json/api Decode JSON::XS 117940 json/api Encode Cpanel::JSON::XS 114802 json/api Encode FU::Util 132067 json/api Encode JSON::PP 5312 json/api Encode JSON::SIMD 130137 json/api Encode JSON::Tiny 7757 json/api Encode JSON::XS 128421 json/intl Decode Cpanel::JSON::XS 50162 json/intl Decode FU::Util 63176 json/intl Decode JSON::PP 329 json/intl Decode JSON::SIMD 51719 json/intl Decode JSON::Tiny 1638 json/intl Decode JSON::XS 50110 json/intl Encode Cpanel::JSON::XS 32545 json/intl Encode FU::Util 109163 json/intl Encode JSON::PP 2176 json/intl Encode JSON::SIMD 37201 json/intl Encode JSON::Tiny 2999 json/intl Encode JSON::XS 36722 json/ints Decode Cpanel::JSON::XS 6151 json/ints Decode FU::Util 5828 json/ints Decode JSON::PP 29 json/ints Decode JSON::SIMD 4361 json/ints Decode JSON::Tiny 86 json/ints Decode JSON::XS 6058 json/ints Encode Cpanel::JSON::XS 7345 json/ints Encode FU::Util 7851 json/ints Encode JSON::PP 113 json/ints Encode JSON::SIMD 7963 json/ints Encode JSON::Tiny 160 json/ints Encode JSON::XS 7915 json/objl Canonical Cpanel::JSON::XS 11875 json/objl Canonical FU::Util 13247 json/objl Canonical JSON::PP 747 json/objl Canonical JSON::SIMD 12388 json/objl Canonical JSON::XS 13174 json/objl Decode Cpanel::JSON::XS 15515 json/objl Decode FU::Util 16571 json/objl Decode JSON::PP 104 json/objl Decode JSON::SIMD 22895 json/objl Decode JSON::Tiny 392 json/objl Decode JSON::XS 23553 json/objl Encode Cpanel::JSON::XS 30587 json/objl Encode FU::Util 35489 json/objl Encode JSON::PP 927 json/objl Encode JSON::SIMD 24418 json/objl Encode JSON::Tiny 1108 json/objl Encode JSON::XS 23192 json/objs Canonical Cpanel::JSON::XS 30862 json/objs Canonical FU::Util 24971 json/objs Canonical JSON::PP 829 json/objs Canonical JSON::SIMD 30699 json/objs Canonical JSON::XS 31326 json/objs Decode Cpanel::JSON::XS 20102 json/objs Decode FU::Util 17998 json/objs Decode JSON::PP 202 json/objs Decode JSON::SIMD 23267 json/objs Decode JSON::Tiny 499 json/objs Decode JSON::XS 25336 json/objs Encode Cpanel::JSON::XS 45732 json/objs Encode FU::Util 39684 json/objs Encode JSON::PP 907 json/objs Encode JSON::SIMD 49019 json/objs Encode JSON::Tiny 1224 json/objs Encode JSON::XS 49814 json/obju Canonical Cpanel::JSON::XS 1459 json/obju Canonical FU::Util 12488 json/obju Canonical JSON::PP 679 json/obju Canonical JSON::SIMD 1331 json/obju Canonical JSON::XS 1375 json/obju Decode Cpanel::JSON::XS 7480 json/obju Decode FU::Util 9290 json/obju Decode JSON::PP 86 json/obju Decode JSON::SIMD 15997 json/obju Decode JSON::Tiny 402 json/obju Decode JSON::XS 8526 json/obju Encode Cpanel::JSON::XS 25333 json/obju Encode FU::Util 32519 json/obju Encode JSON::PP 817 json/obju Encode JSON::SIMD 25031 json/obju Encode JSON::Tiny 1036 json/obju Encode JSON::XS 23580 json/strel Decode Cpanel::JSON::XS 133102 json/strel Decode FU::Util 118073 json/strel Decode JSON::PP 561 json/strel Decode JSON::SIMD 152557 json/strel Decode JSON::Tiny 2175 json/strel Decode JSON::XS 125191 json/strel Encode Cpanel::JSON::XS 197154 json/strel Encode FU::Util 215367 json/strel Encode JSON::PP 3963 json/strel Encode JSON::SIMD 199955 json/strel Encode JSON::Tiny 4463 json/strel Encode JSON::XS 231905 json/stres Decode Cpanel::JSON::XS 118059 json/stres Decode FU::Util 92515 json/stres Decode JSON::PP 352 json/stres Decode JSON::SIMD 153692 json/stres Decode JSON::Tiny 1869 json/stres Decode JSON::XS 97676 json/stres Encode Cpanel::JSON::XS 136755 json/stres Encode FU::Util 225259 json/stres Encode JSON::PP 4251 json/stres Encode JSON::SIMD 158171 json/stres Encode JSON::Tiny 4704 json/stres Encode JSON::XS 157261 json/strs Decode Cpanel::JSON::XS 44560 json/strs Decode FU::Util 44216 json/strs Decode JSON::PP 336 json/strs Decode JSON::SIMD 50429 json/strs Decode JSON::Tiny 1439 json/strs Decode JSON::XS 43976 json/strs Encode Cpanel::JSON::XS 116721 json/strs Encode FU::Util 162246 json/strs Encode JSON::PP 2934 json/strs Encode JSON::SIMD 134711 json/strs Encode JSON::Tiny 4126 json/strs Encode JSON::XS 135419 json/stru Decode Cpanel::JSON::XS 67669 json/stru Decode FU::Util 57397 json/stru Decode JSON::PP 253 json/stru Decode JSON::SIMD 102440 json/stru Decode JSON::Tiny 2585 json/stru Decode JSON::XS 60558 json/stru Encode Cpanel::JSON::XS 97039 json/stru Encode FU::Util 201648 json/stru Encode JSON::PP 5113 json/stru Encode JSON::SIMD 106928 json/stru Encode JSON::Tiny 6603 json/stru Encode JSON::XS 105473 pg/ints Bigint DBD::Pg 22 pg/ints Bigint FU::Pg (bin) 22 pg/ints Bigint FU::Pg (text) 20 pg/ints Bigint Pg::PQ 19 pg/ints Smallint DBD::Pg 194 pg/ints Smallint FU::Pg (bin) 245 pg/ints Smallint FU::Pg (text) 217 pg/ints Smallint Pg::PQ 226 xml/a Rate FU::XMLWriter 5327 xml/a Rate HTML::Tiny 423 xml/a Rate TUWF::XML 795 xml/a Rate XML::Writer 833