#!/usr/bin/env perl use 5.032; use Benchmark qw( :all ); use JSON::PP (); use JSON::XS (); use Cpanel::JSON::XS (); my $good_data = q{{"a": 1, "b": 2, "c": 3}}; my $bad_data = q{{Invalid: JSON, IS: Invalid}}; my @lots_o_good = ($good_data) x 50; my @lots_o_bad = ($bad_data) x 50; cmpthese( 5_000, { pp_good_no_eval => sub { my $parsed; for my $line (@lots_o_good) { $parsed = JSON::PP::decode_json($line); } }, pp_good_eval => sub { my $parsed; for my $line (@lots_o_good) { $parsed = eval { JSON::PP::decode_json($line) }; } }, pp_bad => sub { my $parsed; for my $line (@lots_o_bad) { $parsed = eval { JSON::PP::decode_json($line) }; } }, xs_good => sub { my $parsed; for my $line (@lots_o_good) { $parsed = JSON::XS::decode_json($line); } }, xs_good_eval => sub { my $parsed; for my $line (@lots_o_good) { $parsed = eval { JSON::XS::decode_json($line) }; } }, xs_bad => sub { my $parsed; for my $line (@lots_o_bad) { $parsed = eval { JSON::XS::decode_json($line) }; } }, cpanel_good => sub { my $parsed; for my $line (@lots_o_good) { $parsed = Cpanel::JSON::XS::decode_json($line); } }, cpanel_good_eval => sub { my $parsed; for my $line (@lots_o_good) { $parsed = eval { Cpanel::JSON::XS::decode_json($line) }; } }, cpanel_bad => sub { my $parsed; for my $line (@lots_o_bad) { $parsed = eval { Cpanel::JSON::XS::decode_json($line) }; } }, } ); exit 0; __END__ Rate pp_bad pp_good_eval pp_good_no_eval xs_bad cpanel_bad cpanel_good_eval xs_good_eval cpanel_good xs_good pp_bad 228/s -- -55% -56% -97% -97% -99% -99% -99% -99% pp_good_eval 510/s 124% -- -1% -92% -93% -98% -98% -99% -99% pp_good_no_eval 514/s 125% 1% -- -92% -93% -98% -98% -99% -99% xs_bad 6757/s 2865% 1226% 1215% -- -8% -80% -80% -82% -82% cpanel_bad 7353/s 3126% 1343% 1331% 9% -- -78% -78% -81% -81% cpanel_good_eval 33333/s 14527% 6440% 6387% 393% 353% -- -0% -13% -13% xs_good_eval 33333/s 14527% 6440% 6387% 393% 353% 0% -- -13% -13% cpanel_good 38462/s 16777% 7446% 7385% 469% 423% 15% 15% -- -0% xs_good 38462/s 16777% 7446% 7385% 469% 423% 15% 15% 0% --