Time::Piece が非常に軽い件

自分は普段日付関連のモジュールはDateTimeを使っているのですがニコ生の放送を見ていると Time::Piece を紹介してました。 http://search.cpan.org/dist/Time-Piece/Piece.pm

機能的にはDateTimeと同じように日付の加減算・フォーマット・日付の比較なども出来て普段使う機能を全て網羅している模様です。

売りにしている軽量か?の部分が気になりBenchをとって見ました。

現在の日付を返すだけのシンプルなベンチです。

ベンチスクリプト time_bench.pl

#!/usr/bin/perl

use strict;
use warnings;
use Benchmark qw(timethese  cmpthese);
use DateTime qw/now/;
use Time::Piece qw/localtime/;

my $count = 5000;

my $comp = timethese(
      $count, 
      {
            process_name1 => \&process1,
            process_name2 => \&process2, 
      });

cmpthese $comp;

my ($t1, $t2);

warn  $t1;
warn  $t2;

sub process1 {

  $t1 = DateTime->now(time_zone => "Asia/Tokyo");
}
sub process2 {

  $t2 = localtime->strftime('%Y-%m-%d %H:%M:%S');
}

ベンチ結果

$ perl time_bench.pl
Benchmark: timing 5000 iterations of process_name1, process_name2...
process_name1:  3 wallclock secs ( 2.86 usr +  0.02 sys =  2.88 CPU) @ 1734.42/s (n=5000)
process_name2:  0 wallclock secs ( 0.12 usr +  0.02 sys =  0.13 CPU) @ 37647.06/s (n=5000)
            (warning: too few iterations for a reliable count)
                 Rate process_name1 process_name2
process_name1  1734/s            --          -95%
process_name2 37647/s         2071%            --
2009-11-12T00:59:15 at time_bench.pl line 22.
2009-11-12 00:59:15 at time_bench.pl line 23.

結果を見ると一目瞭然段違いの結果にビックリ、ケタ違いですな。

よーしパパこれから Time::Piece 使っちゃうよ!

created:

Back to top