пʼятниця, 7 жовтня 2011 р.

Тестування швидкодії Time і Date в різних версіях Ruby

Вчора задався питанням швидкодії бібліотек для роботи з датою і часом, які входять до складу Ruby - Time і Date.

Для для тестування був написаний простий скрипт з використанням модуля 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 з метою збільшення продуктивності.

Немає коментарів: