moving toward push parser integration

This commit is contained in:
Wesley Beary 2009-07-09 23:50:41 -07:00
parent ecefb9412c
commit b1a39a8edd
4 changed files with 63 additions and 3 deletions

60
benchs/parse_vs_push.rb Normal file
View File

@ -0,0 +1,60 @@
require 'benchmark'
require 'rubygems'
require 'nokogiri'
class Parser < Nokogiri::XML::SAX::Document
attr_reader :response
def initialize
reset
end
def reset
@item = {}
@response = { :items => [] }
end
def characters(string)
@value << string.strip
end
def start_element(name, attrs = [])
@value = ''
end
def end_element(name)
case name
when 'item'
@response[:items] << @item
@item = {}
when 'key'
@item[:key] = @value
end
end
end
data = <<-DATA
<items>
<item>
<key>value</key>
</item>
</items>
DATA
COUNT = 100
Benchmark.bmbm(25) do |bench|
bench.report('parse') do
parser = Parser.new
Nokogiri::XML::SAX::Parser.new(parser).parse(data)
parser.response
end
bench.report('push') do
parser = Parser.new
Nokogiri::XML::SAX::PushParser.new(parser).write(data, true)
parser.response
end
end

View File

@ -391,7 +391,7 @@ module Fog
})
if parser && !response.body.empty?
Nokogiri::XML::SAX::Parser.new(parser).parse(response.body)
Nokogiri::XML::SAX::PushParser.new(parser).write(response.body, true)
response.body = parser.response
end

View File

@ -300,7 +300,7 @@ DATA
})
if params[:parser] && !response.body.empty?
Nokogiri::XML::SAX::Parser.new(params[:parser]).parse(response.body)
Nokogiri::XML::SAX::PushParser.new(params[:parser]).write(response.body, true)
response.body = params[:parser].response
end

View File

@ -333,7 +333,7 @@ module Fog
})
if parser && !response.body.empty?
Nokogiri::XML::SAX::Parser.new(parser).parse(response.body)
Nokogiri::XML::SAX::PushParser.new(parser).write(response.body, true)
response.body = parser.response
end