Portál AbcLinuxu, 5. listopadu 2025 17:12
Už mě nebavilo neustále přepisovat koncovky v e-mailech co generujeme na Hlidacky.cz, tak jsem googlil páté pády křestních jmen a nalezl jsem.Nacpal jsem to zrůdně to jednoho velkého pole a uělal z toho gem - to kdyby se to někomu hodilo. Je to můj první pokus o gem - šlo by to udělat líp? Věřím že to i někdo další bude potřebovat a pak si vzpomene že o tom četl na abclinuxu:)
Tiskni
Sdílej:
% ruby benchmark.rb
Rehearsal ---------------------------------------------------------
using local variable: 62.000000 0.030000 62.030000 ( 62.237641)
using constant: 0.000000 0.000000 0.000000 ( 0.000484)
----------------------------------------------- total: 62.030000sec
user system total real
using local variable: 61.900000 0.000000 61.900000 ( 62.282676)
using constant: 0.000000 0.000000 0.000000 ( 0.000466)
Jak to zlepšit - dát to pole někde mimo tu metodu?
class CzechNamesVocative
NAMES = { "Marie" => "Marie",
"Jana" => "Jano",
... }
def self.do(name)
NAMES[name]
end
end
Takhle se ti to načte do paměti při startu aplikace, namísto toho, abys při každém volání té metody vytvořil 70k řetězců a pak je nechal GC zase uvolnit.
Super, to zní skvěle, předělám to.
Jak jen spouštíš ten benchmark?
Benchmark.bmbm do |x|
n = 1000
x.report('using local variable:') { n.times { CzechNamesVocativeLocal.do('Petr') } }
x.report('using constant: ') { n.times { CzechNamesVocativeConstant.do('Petr') } }
end
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.