Merhabalar, ben Bunjo. Bu konuda Ruby'de bulunan Benchmark kütüphanesinin kullanımını anlatacağım.
Giriş
Ruby'nin standart kütüphanesinde yer alan Benchmark modülünü kullanmak için herhangi bir ek kurulum yapmanıza gerek yoktur.
Ruby dosyanızda require 'benchmark' komutuyla Benchmark sınıfını dahil edebilirsiniz.
Ruby Benchmark Nedir?
Ruby'de Benchmark, belirli bir kod bloğunun veya işlemin ne kadar sürede tamamlandığını ölçmek için kullanılan bir kütüphanedir.
Bu kütüphane, kod performansını analiz etmek ve optimize etmek için önemli bir araçtır. Benchmark kütüphanesi,
çeşitli zaman ölçüm yöntemleri sunarak geliştiricilerin kodlarının verimliliğini artırmasına yardımcı olur.
Basit Zaman Ölçümü
Bir kod bloğunun ne kadar sürede çalıştığını ölçmek için Benchmark.measure metodunu kullanırız.
Ruby:
require 'benchmark'
require 'net/http'
require 'uri'
uri = URI::HTTPS.build(host: 'google.com', fragment: nil, port: 443, path: nil)
time = Benchmark.measure do
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
response = http.request(request)
puts("Dönüt: #{response.code}")
end
puts time
Bu kod, google.com sitesine bir get isteği yollar. ve gelen dönütü ekrana yazdırır.
Benchmark.measure metotu ile de blok içerisinde bulunan kodların kaç saniye de çalışıp bittiği hesaplanır ve ekrana yazdırılır.
Daha Detaylı Zaman Ölçümü
Birden fazla kod bloğunun zamanını karşılaştırmak için Benchmark.bm veya Benchmark.bmbm metodlarını kullanabilirsiniz.
Benchmark.bmbm, ilk çalıştırmada "ısınma" çalışması yapar ve daha doğru sonuçlar verir.
Ruby:
require 'benchmark'
Benchmark.bm do |x|
x.report("Sum 1:") { (1..1000000).reduce(:+) }
x.report("Sum 2:") { (1..1000000).inject(0) { |sum, i| sum + i } }
end
Kod Çıktısı:
Ruby:
user system total real
Sum 1: 0.031000 0.000000 0.031000 ( 0.049005)
Sum 2: 0.047000 0.000000 0.047000 ( 0.063427)
Benchmark.bm ve Benchmark.bmbm Kullanımı
Benchmark.bm: Birden fazla kod bloğunu karşılaştırmak için kullanılır. Çıktı, her bir bloğun çalışma süresini gösterir.
Ruby:
require 'benchmark'
Benchmark.bm do |x|
x.report("task 1:") { 100000.times { |i| i * i } }
x.report("task 2:") { 100000.times { |i| Math.sqrt(i) } }
end
Kod Çıktısı:
Ruby:
user system total real
task 1: 0.000000 0.000000 0.000000 ( 0.003552)
task 2: 0.000000 0.000000 0.000000 ( 0.002955)
Benchmark.bmbm: İlk olarak ısınma turu yapar, sonra gerçek ölçümü yapar. Bu, daha doğru sonuçlar elde etmenizi sağlar.
Ruby:
require 'benchmark'
Benchmark.bmbm do |x|
x.report("task 1:") { 100000.times { |i| i * i } }
x.report("task 2:") { 100000.times { |i| Math.sqrt(i) } }
end
Kod Çıktısı:
Ruby:
Rehearsal -------------------------------------------
task 1: 0.000000 0.000000 0.000000 ( 0.004080)
task 2: 0.000000 0.000000 0.000000 ( 0.003062)
---------------------------------- total: 0.000000sec
user system total real
task 1: 0.000000 0.000000 0.000000 ( 0.003248)
task 2: 0.000000 0.000000 0.000000 ( 0.003071)
CPU ve Gerçek Zaman Ölçümü
Benchmark.realtime metodu, belirli bir kod bloğunun çalışma süresini saniye cinsinden ölçer ve döner.
Ruby:
require 'benchmark'
require 'httparty'
time = Benchmark.realtime do
response = HTTParty.get("https://google.com")
puts response.code
end
puts "Kod bloğu #{time} saniyede tamamlandı."