YAML::XS VS. YAML::Syck
ググってみたら意外となかった。というか、既に過去の話題すぎるだけかもしれないけど。
まずはベンチマーク。(単にベンチマークスクリプトの練習台という意見もある)
#!/usr/bin/env perl use strict; use warnings; use utf8; use Benchmark qw/:all/;; use YAML::XS (); use YAML::Syck (); $YAML::Syck::ImplicitUnicode = 1; my $reference_data = { hoge => 'hogeeeee', ary => [ 1 .. 50 ], hsh => { map { $_ => "$_-$_" } ( 'a' .. 'z' ) } }; my $ref_yml = YAML::XS::Dump($reference_data); YAML::XS::Load($ref_yml); YAML::Syck::Load($ref_yml); my $result = timethese( 100000, { 'YAML::XS' => sub { YAML::XS::Load($ref_yml); }, 'YAML::Syck' => sub { YAML::Syck::Load($ref_yml); }, } ); cmpthese( $result ) ;
Benchmark: timing 100000 iterations of YAML::Syck, YAML::XS... YAML::Syck: 15 wallclock secs (15.42 usr + 0.04 sys = 15.46 CPU) @ 6468.31/s (n=100000) YAML::XS: 13 wallclock secs (11.63 usr + 0.42 sys = 12.05 CPU) @ 8298.76/s (n=100000) Rate YAML::Syck YAML::XS YAML::Syck 6468/s -- -22% YAML::XS 8299/s 28% --
ということで、YAML::XSの辛勝。
使用メモリを、モジュールをuseした際のメモリ使用量(増加量)を調べてみるを使って調べてみると…
[taiyoh@taiyoh-laptop] $ perl gtop.pl 'use YAML::Syck ();' 2.3M : use YAML::Syck (); [taiyoh@taiyoh-laptop] $ perl gtop.pl 'use YAML::XS ();' 7.8M : use YAML::XS ();
まあ、話になりませんな。トータルのパフォーマンスでは、YAML::Syckにおまじないつけるのが一番いいということで。
(追記)
本当は、Config::GeneralとYAML::Syckの比較をするつもりだったのだけど、あまりに差がひどいので、急遽趣旨を差し替えた。
Benchmark: timing 10000 iterations of Config::General, YAML::Syck... Config::General: 29 wallclock secs (29.05 usr + 0.04 sys = 29.09 CPU) @ 343.76/s (n=10000) YAML::Syck: 2 wallclock secs ( 1.61 usr + 0.00 sys = 1.61 CPU) @ 6211.18/s (n=10000) Rate Config::General YAML::Syck Config::General 344/s -- -94% YAML::Syck 6211/s 1707% --
[taiyoh@taiyoh-laptop] $ perl gtop.pl 'use Config::General ();' 7.9M : use Config::General ();