REXML ã¨libxml-ruby ã®è§£æéåº¦ãæ¯è¼ã㦠Gruff ã§æç»ãã¦ã¿ã
Rubyの文字列の連結速度を測定してGruffで表示してみた - すえひろがりっっっっ! ã®ä½¿ãåãã
REXML 㯠pure ruby ãªã®ã§å人çã«ä½¿ãåã«ã¯æ°è»½ã«ä½¿ãã¦ããã®ã§ããã³ã£ãããããããé
ãã®ã§ãã·ã¹ãã ã«ã¯çµã¿è¾¼ãã¾ãããã¨ããã®ãã°ã©ãã§è¡¨ç¤ºãã¦ã¿ãã
ç°å¢
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
libxml-ruby (1.1.4)
gruff (0.3.6)
å®é¨ã³ã¼ã
<root> <child/> <child/> <child/> ... </root>
ã¿ãããªåç´ãªæ§é ã®XMLã REXML 㨠libxml-ruby ã§è§£æãã¾ãã
åè¦ç´ ã®æ°ãå¾ã
ã«å¢ããã¦ããããã«ããã£ãæéããããããã¦ããã¾ãã
require 'rubygems' require 'gruff' require 'benchmark' require 'xml/libxml' require 'rexml/document' # æå¤§åè¦ç´ æ° MAX = 10000 # å»ã¿ STEP = 100 g = Gruff::Line.new # <root><child/><child>...</root> ã®ãããªåç´ãª XML ã使 # 弿° num ã ã child è¦ç´ ãä½ã def build_xml(num) xml = '<root>' num.times do xml << '<child/>' end xml << '</root>' end # XMLã®å¤§ãããé æ¬¡å¤æ´ããyield ã§æ¸¡ãã¦è§£ææéãè¨æ¸¬ãã # è¿ãå¤ã¯è¨æ¸¬ããæéã®é å def bench benchmarks = [] 0.step(MAX, STEP) do |i| xml = build_xml(i) benchmarks << Benchmark.measure do yield xml end end benchmarks.collect{|b| b.real} end g.theme_37signals # REXML ã§è§£æã㦠plot g.data("rexml", bench do |xml| REXML::Document.new(xml).elements.each("root/child") {|_|} end ) # libxml-ruby ã§è§£æãã¦plot g.data("libxml-ruby", bench do |xml| XML::Document.string(xml).root.find('/root/child').each {|_|} end ) 0.step(MAX, MAX / 4) do |i| g.labels.merge!({i/STEP => i.to_s}) end g.x_axis_label = 'Times' g.y_axis_label = 'seconds' g.write('result.png')
ã¾ã¨ã
- REXML éããã10000è¡ç¨åº¦ã§ç§åä½ã«ãªãã¨ã¯æããªãã£ããæ¬çªã·ã¹ãã ã§ã¯ä½¿ããªãã
- Gruff 楽ãããã