La regola d'oro dell'ottimizzazione: misura, non indovinare. Ruby ha il modulo Benchmark integrato per confrontare approcci diversi con dati reali.
require "benchmark"
array = (1..100_000).to_a
Benchmark.bm(10) do |x|
x.report("each+push") do
r = []
array.each { |n| r << n * 2 }
end
x.report("map") do
array.map { |n| n * 2 }
end
end
Benchmark.bm esegue ogni blocco e stampa il tempo impiegato, così vedi nero su bianco quale strada è più veloce. Per confronti più rigorosi (con riscaldamento e statistica) c'è la gem benchmark-ips, che misura le iterazioni al secondo.
Perché conta: le intuizioni sulle performance sbagliano di continuo. Quella che "sembra" più veloce spesso non lo è, e l'ottimizzazione prematura complica il codice senza guadagni. Prima misuri, poi ottimizzi solo ciò che i numeri indicano come lento davvero. Il resto lascialo leggibile.