JSONとMojo::JSONのencodeベンチマーク

最近mojoliciousを触る機会が多いです。
JSON使う要件が出てきて、render_jsonってのがあるけど何使ってんのかなーと追ってみたら
Mojo::JSONというのモジュールで自前実装してるっぽい。


これそのまま使えばいいんじゃね?ということで
いちおうベンチマーク取ってみた。

ベンチマークスクリプト

#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw(timethese  cmpthese);
use JSON::PP;
use JSON::XS;
use Mojo::JSON;
my $count = 100000;

my $obj = {
   id   => ["foo", "bar", { aa => 'bb'}],
   hoge => 'boge',
   no   => 123 ,
   bo   => "true"
};

my $comp = timethese(
    $count,
    {
        json_pp => \&json_pp,
        json_xs => \&json_xs,
        mojo_json => \&mojo_json,
    }
);

cmpthese $comp;

sub json_pp {
    my $js  = JSON::PP->new->encode($obj);
}
sub json_xs {
    my $js  = JSON::XS->new->encode($obj);
}
sub mojo_json {
    my $js = Mojo::JSON->new->encode($obj);
}

結果

              Rate mojo_json   json_pp   json_xs
mojo_json   9285/s        --       -4%      -97%
json_pp     9625/s        4%        --      -97%
json_xs   285714/s     2977%     2869%        --


PurePerlだとあんま変わらんのでMojo::JSON使うでいいか。
機能は少なそうだけど。
*1

*1:ちなみにJSONモジュールはXSが入ってたら勝手にそっち使うみたい