Testare la performance del codice in Ruby e in Rails

Posted by Dibi Store Wed, 07 Nov 2007 10:22:00 GMT

Quando scriviamo del codice in ruby, non sempre risulta efficente, per qui potremmo trovarci nelle situazioni di usare una tecnica molto piu lenta rispetto ad un altra, che magari crediamo sbagliata. Rimanere nel dubbio, non è una buona cosa, specialmente per noi programmatori, per qui in questo articolo illustro 2 tecniche: la prima per testare il codice prodotto con ruby, e l'altra per testare la velocità delle sql in rails.

Performance in Ruby

Ruby dispone di una libreria chiamata Benchmark, che ci permette di testare la velocità del codice, ci basterà quindi includela nel nostro test, e provare un esempio come il seguente (preso da programming ruby):

require 'benchmark'
include Benchmark

string = "Stormy Weather"
m = string.method(:length)

bm(6) do |x|
  x.report("call") { 10_000.times { m.call } }
  x.report("send") { 10_000.times { string.send(:length) } }
  x.report("eval") { 10_000.times { eval "string.length" } }
end


produces:
user system total real
call 0.020000 0.000000 0.020000 ( 0.045998)
send 0.040000 0.000000 0.040000 ( 0.051318)
eval 0.130000 0.000000 0.130000 ( 0.177950)

Il che non è niente male, giocateci un po per capire come sfruttarlo.

Performance in Rails

Rails ci mette a disposizione la classe benchmark per testare la velocità delle sql, che è utilissima, potete includere del codice simile al seguente in un vostro modello, richiamando poi una qualsiasi azione di quel modello, potrete vedere nel log il tempo che ci ha messo:

User.benchmark("adding and deleting 1000 users") do
	1000.times do
		State.create(:name => 'something')
		x = State.find_by_name('something')
		x.destroy
	end
end

Spero prossimamente di poter fare degli articoli dettagliati riguardanti le performance, intanto vi lascio sperimentare un po :)

Posted in  | Tags  | no comments