Portál AbcLinuxu, 30. dubna 2025 20:10
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 endTakhle 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.