=head1 NAME

FU::Benchmarks - A bunch of automated benchmark results.

=head1 DESCRIPTION

This file is automatically generated from 'bench.PL' in the L<FU> distribution.
These benchmarks compare performance of some FU functionality against similar
modules found on CPAN.

B<DISCLAIMER#1:> 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<DISCLAIMER#2:> 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<DISCLAIMER#3:> 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<Cpanel::JSON::XS> 4.38

=item L<FU> 0.1

=item L<HTML::Tiny> 1.08

=item L<JSON::PP> 4.16

=item L<JSON::SIMD> 1.06

=item L<JSON::Tiny> 0.58

=item L<JSON::XS> 4.03

=item L<TUWF::XML> 1.5

=item L<XML::Writer> 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 JSON::SIMD formatting code is forked from JSON::XS, the
SIMD parts are only used for parsing.

API object from L<JSON::XS> documentation.

                        Encode   Canonical      Decode
          JSON::PP      5312/s      5119/s      1290/s
        JSON::Tiny      7757/s           -      3426/s
  Cpanel::JSON::XS    108187/s    101867/s    103575/s
        JSON::SIMD    130137/s    118948/s    115123/s
          JSON::XS    128421/s    120243/s    117940/s
          FU::Util    133182/s    113275/s    118213/s

Object (small)

                        Encode   Canonical      Decode
          JSON::PP       907/s       829/s       202/s
        JSON::Tiny      1224/s           -       499/s
  Cpanel::JSON::XS     43168/s     28114/s     19229/s
        JSON::SIMD     49019/s     30699/s     23267/s
          JSON::XS     49814/s     31326/s     25336/s
          FU::Util     44110/s     26134/s     21144/s

Object (large)

                        Encode   Canonical      Decode
          JSON::PP       927/s       747/s       104/s
        JSON::Tiny      1108/s           -       392/s
  Cpanel::JSON::XS     29672/s     12637/s     16609/s
        JSON::SIMD     24418/s     12388/s     22895/s
          JSON::XS     23192/s     13174/s     23553/s
          FU::Util     39477/s     13567/s     17178/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     20437/s      1345/s      7408/s
        JSON::SIMD     25031/s      1331/s     15997/s
          JSON::XS     23580/s      1375/s      8526/s
          FU::Util     34435/s     11916/s      9419/s

Small integers

                        Encode      Decode
          JSON::PP       113/s        29/s
        JSON::Tiny       160/s        86/s
  Cpanel::JSON::XS      7137/s      6083/s
        JSON::SIMD      7963/s      4361/s
          JSON::XS      7915/s      6058/s
          FU::Util      8565/s      5639/s

Large integers

                        Encode      Decode
          JSON::PP      2176/s       329/s
        JSON::Tiny      2999/s      1638/s
  Cpanel::JSON::XS     31302/s     48892/s
        JSON::SIMD     37201/s     51719/s
          JSON::XS     36722/s     50110/s
          FU::Util    116188/s     62110/s

ASCII strings

                        Encode      Decode
          JSON::PP      2934/s       336/s
        JSON::Tiny      4126/s      1439/s
  Cpanel::JSON::XS    116744/s     43489/s
        JSON::SIMD    134711/s     50429/s
          JSON::XS    135419/s     43976/s
          FU::Util    182026/s     44312/s

Unicode strings

                        Encode      Decode
          JSON::PP      5113/s       253/s
        JSON::Tiny      6603/s      2585/s
  Cpanel::JSON::XS     91704/s     64489/s
        JSON::SIMD    106928/s    102440/s
          JSON::XS    105473/s     60558/s
          FU::Util    217135/s     58972/s

String escaping (few)

                        Encode      Decode
          JSON::PP      4251/s       352/s
        JSON::Tiny      4704/s      1869/s
  Cpanel::JSON::XS    131789/s    106306/s
        JSON::SIMD    158171/s    153692/s
          JSON::XS    157261/s     97676/s
          FU::Util    191699/s     91177/s

String escaping (many)

                        Encode      Decode
          JSON::PP      2224/s       366/s
        JSON::Tiny      2884/s       984/s
  Cpanel::JSON::XS    136583/s    100789/s
        JSON::SIMD    152951/s    113242/s
          JSON::XS    153471/s    106269/s
          FU::Util    142604/s     97984/s



=head2 XML Writing

HTML fragment

         TUWF::XML       795/s
       XML::Writer       833/s
        HTML::Tiny       423/s
     FU::XMLWriter      5285/s



=cut

# Cached data used by bench.PL. Same as the formatted tables above but easier to parse.
json/api	Canonical	Cpanel::JSON::XS	101867
json/api	Canonical	FU::Util	113275
json/api	Canonical	JSON::PP	5119
json/api	Canonical	JSON::SIMD	118948
json/api	Canonical	JSON::XS	120243
json/api	Decode	Cpanel::JSON::XS	103575
json/api	Decode	FU::Util	118213
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	108187
json/api	Encode	FU::Util	133182
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	48892
json/intl	Decode	FU::Util	62110
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	31302
json/intl	Encode	FU::Util	116188
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	6083
json/ints	Decode	FU::Util	5639
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	7137
json/ints	Encode	FU::Util	8565
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	12637
json/objl	Canonical	FU::Util	13567
json/objl	Canonical	JSON::PP	747
json/objl	Canonical	JSON::SIMD	12388
json/objl	Canonical	JSON::XS	13174
json/objl	Decode	Cpanel::JSON::XS	16609
json/objl	Decode	FU::Util	17178
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	29672
json/objl	Encode	FU::Util	39477
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	28114
json/objs	Canonical	FU::Util	26134
json/objs	Canonical	JSON::PP	829
json/objs	Canonical	JSON::SIMD	30699
json/objs	Canonical	JSON::XS	31326
json/objs	Decode	Cpanel::JSON::XS	19229
json/objs	Decode	FU::Util	21144
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	43168
json/objs	Encode	FU::Util	44110
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	1345
json/obju	Canonical	FU::Util	11916
json/obju	Canonical	JSON::PP	679
json/obju	Canonical	JSON::SIMD	1331
json/obju	Canonical	JSON::XS	1375
json/obju	Decode	Cpanel::JSON::XS	7408
json/obju	Decode	FU::Util	9419
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	20437
json/obju	Encode	FU::Util	34435
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	100789
json/strel	Decode	FU::Util	97984
json/strel	Decode	JSON::PP	366
json/strel	Decode	JSON::SIMD	113242
json/strel	Decode	JSON::Tiny	984
json/strel	Decode	JSON::XS	106269
json/strel	Encode	Cpanel::JSON::XS	136583
json/strel	Encode	FU::Util	142604
json/strel	Encode	JSON::PP	2224
json/strel	Encode	JSON::SIMD	152951
json/strel	Encode	JSON::Tiny	2884
json/strel	Encode	JSON::XS	153471
json/stres	Decode	Cpanel::JSON::XS	106306
json/stres	Decode	FU::Util	91177
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	131789
json/stres	Encode	FU::Util	191699
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	43489
json/strs	Decode	FU::Util	44312
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	116744
json/strs	Encode	FU::Util	182026
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	64489
json/stru	Decode	FU::Util	58972
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	91704
json/stru	Encode	FU::Util	217135
json/stru	Encode	JSON::PP	5113
json/stru	Encode	JSON::SIMD	106928
json/stru	Encode	JSON::Tiny	6603
json/stru	Encode	JSON::XS	105473
xml/a	Rate	FU::XMLWriter	5285
xml/a	Rate	HTML::Tiny	423
xml/a	Rate	TUWF::XML	795
xml/a	Rate	XML::Writer	833
