REXMLとNokogiriの比較のため、先に書いたxmlファイルを使って次のようなプログラムを走らせました。REXMLもXpathを利用しています(どうやって同じような処理をさせたら良いのか分からなかったので(^^;)
require 'nokogiri'
require "rexml/document" # to parse the xml files
max = 30000
#REXML処理
include REXML
puts 'REXML'
f=File.open('abc.xml')
dayRs = Time.now
doc2 = REXML::Document.new(f)
count = 0
for i in 1..max
XPath.each( doc2, "/a/c/d/attribute::type").each do |d|
if d.to_s == 'AB' then
count = count + 1
# puts 'RE: '+d.to_s
end
end
end
dayRe = Time.now
f.close
puts dayRs
puts dayRe
puts dR=dayRe-dayRs
puts count
#Nokogiri処理
puts 'Nokogiri'
f=File.open('abc.xml')
dayNs = Time.now
doc=Nokogiri::XML(f)
count = 0
for i in 1..max
doc.xpath("/a/c/d/attribute::type").each do |d|
if d.to_s == 'AB' then
count = count + 1
# puts 'noko: '+d.to_s
end
end
end
dayNe = Time.now
puts dayNs
puts dayNe
puts dN=dayNe-dayNs
puts count
puts dR/dN #比を取る
結果は、
REXML
Thu Mar 18 21:17:15 +0900 2010
Thu Mar 18 21:19:56 +0900 2010
161.166115 # (秒)
90000
Nokogiri
Thu Mar 18 21:19:56 +0900 2010
Thu Mar 18 21:20:01 +0900 2010
4.852485 # (秒)
90000
33.2131093656137 <= 比 33倍Nokogiriの方が高速
50MBのXMLファイルも普通に(めちゃくちゃ待たされることなく)読み込めました(^^V
0 件のコメント:
コメントを投稿