Warming up --------------------------------------
oga.simple 503.000 i/100ms
oga.xpath 677.000 i/100ms
oga.css 783.000 i/100ms
nokogiri.simple 450.000 i/100ms
nokogiri.xpath 145.000 i/100ms
nokogiri.css 210.000 i/100ms
nokogiri.slop 81.000 i/100ms
Calculating -------------------------------------
oga.simple 14.479k (± 6.8%) i/s - 72.432k in 5.027306s
oga.xpath 9.530k (± 4.5%) i/s - 48.067k in 5.053748s
oga.css 8.629k (± 4.0%) i/s - 43.065k in 4.998643s
nokogiri.simple 10.771k (± 6.0%) i/s - 54.000k in 5.033027s
nokogiri.xpath 3.198k (± 6.2%) i/s - 15.950k in 5.007498s
nokogiri.css 2.933k (± 5.6%) i/s - 14.700k in 5.029852s
nokogiri.slop 638.924 (±13.3%) i/s - 3.159k in 5.033672s
Comparison:
oga.simple: 14478.7 i/s
nokogiri.simple: 10770.5 i/s - 1.34x slower
oga.xpath: 9530.4 i/s - 1.52x slower
oga.css: 8628.9 i/s - 1.68x slower
nokogiri.xpath: 3197.7 i/s - 4.53x slower
nokogiri.css: 2932.6 i/s - 4.94x slower
nokogiri.slop: 638.9 i/s - 22.66x slower
require 'oga'
require 'nokogiri'
require 'benchmark/ips'
xml = <<XML
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rating>
<kp_rating num_vote="14108">8.375</kp_rating>
</rating>
XML
Benchmark.ips do |x|
x.config(:time => 5, :warmup => 2)
x.report('oga.simple') do
oga_doc = Oga.parse_xml(xml)
ratings = oga_doc.children.first.children
kp_rating = ratings.detect { |e| e.name == "kp_rating" }
end
x.report('oga.xpath') do
oga_doc = Oga.parse_xml(xml)
kp_rating = oga_doc.at_xpath('/rating/kp_rating')
end
x.report('oga.css') do
oga_doc = Oga.parse_xml(xml)
kp_rating = oga_doc.at_css('kp_rating')
end
x.report('nokogiri.simple') do
nokogiri_doc = Nokogiri::XML.parse(xml)
ratings = nokogiri_doc.children.first.children
kp_rating = ratings.detect { |e| e.name == "kp_rating" }
end
x.report('nokogiri.xpath') do
nokogiri_doc = Nokogiri::XML.parse(xml)
kp_rating = nokogiri_doc.at_xpath('/rating/kp_rating')
end
x.report('nokogiri.css') do
nokogiri_doc = Nokogiri::XML.parse(xml)
kp_rating = nokogiri_doc.at_css('kp_rating')
end
x.report('nokogiri.slop') do
nokogiri_doc = Nokogiri::XML.parse(xml).slop!
kp_rating = nokogiri_doc.rating.kp_rating
end
x.compare!
end
I re-ran this with: ruby 2.3.6 / oga 2.14 / nokogiri 1.8.2 / VM running Ubuntu 14.04.5 LTS