Nokogiriが速いそうです
NokogiriというXML/HTMLパーサが速いそうです。
http://nokogiri.rubyforge.org/nokogiri/
Nokogiri parses and searches XML/HTML faster than Hpricot, and also has correctly implemented CSS3 selector support as well as XPath support.
Hpricotより速いよ、って書いてあります。
ためしに、前回Hpricotで書いた Yahoo路線情報から岐阜->秋田間の運賃を取得するコードを
hrpticot -> nokogiri に変更しただけのコードでベンチマークを取ってみました。
サンプルコード
require 'rubygems' #require 'hpricot' require 'nokogiri' require 'open-uri' require 'kconv' ## 岐阜 -> 秋田 url = "http://transit.yahoo.co.jp/search/result?from=%E5%B2%90%E9%98%9C&to=%E7%A7%8B%E7%94%B0&via=&shin=1&ex=1&hb=1&al=1&ym=200810&d=29&hh=02&m1=1&m2=3&type=1&ost=0&ei=utf-8&x=59&y=5" class YahooTransit def initialize(url) @url = url #@doc = Hpricot(open(@url).read) @doc = Nokogiri(open(@url).read) @parse_tag = "span[@class^='route-fare']" end def expense (@doc/@parse_tag).map {|elem| elem.inner_html.toutf8.gsub(/[^0-9]/,'') }.sort end end yt = YahooTransit.new(url) puts yt.expense.join(",") #=> 30740,30830,31980
ベンチ
Hpricotのベンチ
real | user | sys | |
---|---|---|---|
1回 | 0m1.619s | 0m0.368s | 0m0.040s |
2回 | 0m1.730s | 0m0.344s | 0m0.048s |
3回 | 0m1.639s | 0m0.376s | 0m0.064s |
Nokogiriのベンチ
real | user | sys | |
---|---|---|---|
1回 | 0m1.659s | 0m0.240s | 0m0.032s |
2回 | 0m1.560s | 0m0.196s | 0m0.060s |
3回 | 0m2.061s | 0m0.212s | 0m0.040s |
サンプルがいまいちだったので、体感で大きな差はありませんでしたが、ベンチをみるとNokogiriの方が性能は良さそうですね。
もうすこしデータ量を大きくして試すと、かなり差がでそうです。
追記
RubyInsideに Hpricot と Nokogiri のベンチマークが載っていました。
http://www.rubyinside.com/nokogiri-ruby-html-parser-and-xml-parser-1288.html
http://gist.github.com/18533