調査3

ベンチマーク

それぞれ現在時刻を"Fri May 23 03:00:18 JST 2009\n"の形式に整形する処理を50回繰り返して標準出力に出力する作業を10000回行う。関数を作成し実行する。
Apple Mac mini 2GHz Intel Core 2 Duo,
RAM 2 GB 667 MHz DDR2 SDRAM,
MacOSX 10.5.6

  • perl, v5.8.9 built for darwin2-level
  • v8 version 1.2.4.3
  • ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]


Perl
7.29[s] 7.31[s] 7.28[s] 7.30[s] 7.25[s] 7.24[s] 7.26[s] 7.25[s] 7.28[s] 7.23[s]
平均:7.269[s]


Javascript(v8)
18.724[s] 18.640[s] 19.233[s] 19.459[s] 19.265[s] 18.982[s] 19.230[s] 18.686[s] 19.117[s] 18.747[s]
平均:19.0083[s]


Ruby
8.297[s] 7.932[s] 8.183[s] 8.485[s] 8.250[s] 8.092[s] 7.963[s] 7.976[s] 8.334[s] 8.375[s]
平均:8.1887[s]

付録 ベンチマーク用に実行したソースコード

perl

use strict;
use warnings;
use POSIX 'strftime';

my @t1 = (times);
test_date();
my @t2 = (times);
my $t3 = @t2[0] - @t1[0];
print "$t3 [sec]\n";

sub test_date {
    my $outer_i = 10000;
    my $inner_i = 50; 

    for(my $i=0; $i<$outer_i; ++$i){
        for(my $j=0; $j<$inner_i; ++$j){

            my $now = strftime "%a %b %d %H:%M:%S %Z %Y", localtime;
            print $now, "\n";
        }   
    }   
}
0;


Javascript(v8)

var test_date = function (){ 

    var outer_i = 10000;
    var inner_i = 50; 

    for(i=0; i<outer_i; ++i){
        for(j=0; j<inner_i; ++j){
            var Date_ins  = new Date();
            var Day_ins   = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
            var Month_ins = new Array("Jun", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");

            var year     = Date_ins.getYear() + 1900;
            var month    = Month_ins[Date_ins.getMonth()];
            var day      = Date_ins.getDate();
            var week     = Day_ins[Date_ins.getDay()];
            var hour     = Date_ins.getHours();
            var minute   = Date_ins.getMinutes();
            var second   = Date_ins.getSeconds();

            var time = week + " " + month + " " + day + " "  + hour + ":" + minute + ":" + second + " JST " + year;
            print(time);
        }   
    }   
};

var date = new Date;
var start_time = date.getTime();

test_date();

var date = new Date;
var end_time = date.getTime();
var time = end_time - start_time;

print(time + "[ms]");


Ruby

def test_date
    outer_i = 10000;
    inner_i = 50; 
    outer_i.times{
        inner_i.times{
           puts Time.new.strftime("%a %b %d %H:%M:%S %Z %Y") 
        }   
    }   
end

start_time = Time.new
test_date
end_time = Time.new

puts(end_time - start_time)