調査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]
付録 ベンチマーク用に実行したソースコード
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)