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 ();