JSON::DWIW vs JSON::Syck vs JSON
最近CPANにJSON::DWIWというJSON parserがリリースされて居ました。
このモジュールのPODにはBenchmarkの結果があり、JSON, JSON::Syckとのベンチ結果が載っていますが、なんとJSON::Syckより速いとの結果が出ています!
ちょっと気になったので自分でもベンチマークを取ってみました。
ソース
下記のような感じです。
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark;
use Data::Dump qw/dump/;
use File::Slurp;
use JSON qw();
use JSON::Syck;
use JSON::DWIW;
our $json_file = $ARGV[0];
die("not json file") unless ($json_file && -e $json_file);
our $json_data = File::Slurp::slurp($json_file);
sub json_to_obj {
my $json_data = shift;
JSON::jsonToObj($json_data);
}
sub json_to_obj_syck {
my $json_data = shift;
JSON::Syck::Load($json_data);
}
sub json_to_obj_dwiw {
my $json_data = shift;
JSON::DWIW->from_json($json_data);
}
timethese(
10000, {
'JSON' => sub { json_to_obj($json_data); },
'JSON::Syck' => sub { json_to_obj_syck($json_data) },
'JSON::DWIW' => sub { json_to_obj_dwiw($json_data) }
}
);
ベンチマーク結果
下記のようになりました。
Benchmark: timing 10000 iterations of JSON, JSON::DWIW, JSON::Syck... JSON: 180 wallclock secs (179.36 usr + 0.12 sys = 179.48 CPU) @ 55.72/s (n=10000) JSON::DWIW: 12 wallclock secs (12.04 usr + 0.01 sys = 12.05 CPU) @ 829.88/s (n=10000) JSOJSON::Syck: 37 wallclock secs (36.48 usr + 0.23 sys = 36.71 CPU) @ 272.41/s (n=10000)
JSONモジュールが話にならない位遅いのは予想通りとして、JSON::Syckよりも約3倍速いと言える結果が出ました。これは凄い。
まだリリースしたてのモジュールみたいなんである程度枯れて欲しいとは思いますが、今後注目のモジュールですね。
追記
実験用データを晒すべきとのコメントを早くも頂きましたので、こちらがテストデータです。
trackback
- trackback url
- trackback count
- 0
comment
http://search.cpan.org/dist/JSON-XS-0.1/XS.pm
入れ違いにこんなの出ましたね。
> nekokakさん
うわ、本当だ。しかも明らかに対抗馬として出してますね。
追試、した方がいいっすかね?w
しかも抜群に速い。。。
JSON::XSですが、FreeBSD 6-Stableだとこけます。
とはいっても
--- XS.xs Sat Mar 24 10:14:01 2007
+++ /home/dankogai/cpan/JSON-XS-0.31-dan/XS.xs Sun Mar 25 03:09:34 2007
@@ -305,7 +305,7 @@
if (enc->flags & F_CANONICAL)
{
HE *he, *hes [count];
- int fast = 1;
+ int fast = 0;
i = 0;
while ((he = hv_iternext (hv)))
で直るのですが。作者には報告済み。
#ソースも綺麗です、JSON::XS
> 弾さん
弾さんの0.31の状態からだいぶ進化して今は0.8まで上がってますね。http://search.cpan.org/src/MLEHMANN/JSON-XS-0.8/Changes
#ソースも綺麗です、JSON::XS
XS未体験の人にも良いソースですかね?^^;