Для для тестування був написаний простий скрипт з використанням модуля Benchmark, який надає методи для вимірювання та звітності часу, що був затрачений на виконання коду Ruby:
require 'benchmark'
require 'date'
puts RUBY_DESCRIPTION
n = 10_000
puts
Benchmark.bm(10) do |x|
x.report("Time:") { n.times{Time.now} }
x.report("DateTime:") { n.times{DateTime.now} }
end
puts
Benchmark.bm(10) do |x|
x.report("Time:") { n.times{Time.mktime(2012, 12, 23)} }
x.report("DateTime:") { n.times{DateTime.new(2012, 12, 23)} }
end
У тестуванні будуть брати участь наступні версії Ruby: 1.8.7, 1.9.2 та 1.9.3-rc1, а також альтернативні реалізації інтерпретатора: Rubinius написаного на мові C++ та JRuby - на Java.
Тепер подивимося на результат виконання цього скрипта:
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]
user system total real
Time: 0.010000 0.000000 0.010000 ( 0.032526)
DateTime: 2.910000 0.030000 2.940000 ( 4.371719)
user system total real
Time: 0.040000 0.060000 0.100000 ( 0.190266)
DateTime: 1.040000 0.000000 1.040000 ( 1.326671)
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
user system total real
Time: 0.020000 0.000000 0.020000 ( 0.040165)
DateTime: 0.580000 0.040000 0.620000 ( 0.818230)
user system total real
Time: 0.070000 0.070000 0.140000 ( 0.251188)
DateTime: 0.210000 0.000000 0.210000 ( 0.280489)
ruby 1.9.3dev (2011-09-23 revision 33323) [i686-linux]
user system total real
Time: 0.020000 0.000000 0.020000 ( 0.029162)
DateTime: 0.020000 0.000000 0.020000 ( 0.055203)
user system total real
Time: 0.110000 0.040000 0.150000 ( 0.195542)
DateTime: 0.010000 0.000000 0.010000 ( 0.021322)
rubinius 1.2.5dev (1.8.7 560efecd yyyy-mm-dd JI) [i686-pc-linux-gnu]
user system total real
Time: 0.004001 0.004000 0.008001 ( 0.028069)
DateTime: 1.840115 0.028002 1.868117 ( 5.183743)
user system total real
Time: 0.128008 0.040002 0.168010 ( 0.429770)
DateTime: 0.896056 0.000000 0.896056 ( 3.165078)
rubinius 2.0.0dev (1.8.7 553ead30 yyyy-mm-dd JI) [i686-pc-linux-gnu]
user system total real
Time: 0.008001 0.000000 0.008001 ( 0.025819)
DateTime: 2.236140 0.068005 2.304145 ( 6.604527)
user system total real
Time: 0.116007 0.060004 0.176011 ( 0.477415)
DateTime: 0.928058 0.004000 0.932058 ( 3.251413)
jruby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (OpenJDK Client VM 1.6.0_23) [linux-i386-java]
user system total real
Time: 0.364000 0.000000 0.364000 ( 0.195000)
DateTime: 2.117000 0.000000 2.117000 ( 2.118000)
user system total real
Time: 0.311000 0.000000 0.311000 ( 0.311000)
DateTime: 1.639000 0.000000 1.639000 ( 1.639000)
P.S. В Ruby 1.9.3 бібліотека 'date' була переписана на мові C з метою збільшення продуктивності.
Немає коментарів:
Дописати коментар