Home » Как протестировать код Ruby

Как протестировать код Ruby

Узнайте, как протестировать (т. е. измерить производительность) код Ruby, из этой небольшой статьи.

Что такое бенчмаркинг?

Бенчмаркинг — это мера производительности фрагмента кода. Лично мне эта тема кажется несколько спорной. поскольку что-то более читабельное, но работает не так хорошо, как менее производительный фрагмент кода.

Но поэкспериментировав с некоторыми методами Ruby, вот три способа, с помощью которых я попытался проверить, работает ли один способ решения проблемы лучше, чем другой.

Давайте попробуем Ruby-способ…

Сегодня я собираюсь попробовать цикл while в Ruby. Существует несколько доступных синтаксисов, поэтому я попробую 2 из них.

В основном это будет статья, основанная на примерах. Погуглив, я нашел 3 способа протестировать цикл while. Пойдем.

Во-первых, Benchmark.realtime

require 'benchmark'

time = Benchmark.realtime do
  x = 1
  loop do
    x += 1
    break if x > 100
  end
end
puts "loop took #{time} seconds."

time = Benchmark.realtime do
  x = 1
  while true
    x += 1
    break if x > 100
  end
end
puts "while took #{time} seconds."

Результат:

loop took 8.14200029708445e-06 seconds.
while took 1.203499959956389e-05 seconds.

Хорошо, отчет не очень читаемый, но кажется, что цикл работает лучше.

Во-вторых, Benchmark.bm.

require 'benchmark'

Benchmark.bm do |benchmark|
  benchmark.report("loop.") do
    x = 1
    loop do
      x += 1
      break if x > 100
    end
  end

  benchmark.report("while") do
    x = 1
    while true
      x += 1
      break if x > 100
    end
  end
end

Дает следующие результаты:

       user     system      total        real
loop.  0.000020   0.000006   0.000026 (  0.000022)
while  0.000003   0.000001   0.000004 (  0.000003)

В столбце «реальный» указано общее затраченное время.

Ура! Кажется, что теперь, когда while версия работает лучше.

Попробуем еще раз тем же методом.

       user     system      total        real
loop.  0.000014   0.000002   0.000016 (  0.000011)
while  0.000004   0.000000   0.000004 (  0.000004)

Ок, похоже, что 2 последовательных запуска дают совсем другой результат. По крайней мере, на этот раз тот же метод работает лучше.

Read more:  В результате удара США в Багдаде убит командир проиранской группировки

В-третьих, Benchmark.measure

require 'benchmark'

puts Benchmark.measure {
  50_000.times do
    x = 1
    loop do
      x += 1
      break if x > 100
    end
  end
}

puts Benchmark.measure {
  50_000.times do
    x = 1
    while true
      x += 1
      break if x > 100
    end
  end
}

Это дает следующие результаты:

  0.261000   0.003973   0.264973 (  0.266082)
  0.083610   0.000001   0.083611 (  0.083994)

Первая строка — это результат .loop метод, а второй о .while метод.

Результатом в скобках является агрегат (полное время для вычисления операции).

.while вроде здесь лучше.

Краткое содержание

Мы рассмотрели три способа измерения производительности метода Ruby, однако трудно сделать какой-либо вывод, поскольку здесь у меня были разные результаты. Мне нужно провести расследование, чтобы быть уверенным в том, что происходит.

2024-03-14 08:39:30


1710409216
#Как #протестировать #код #Ruby

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.