fu/FU/Benchmarks.pod

321 lines
10 KiB
Text

=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