Skip to content

Commit bd2b3c4

Browse files
committed
Add parse_cdata benchmark
``` $ benchmark-driver benchmark/parse_cdata.yaml Calculating ------------------------------------- rexml 3.2.6 master 3.2.6(YJIT) master(YJIT) dom 72.316 190.236 71.727 184.140 i/s - 100.000 times in 1.382811s 0.525662s 1.394183s 0.543065s sax 74.221 202.640 73.290 199.295 i/s - 100.000 times in 1.347336s 0.493487s 1.364445s 0.501768s pull 74.035 202.206 73.616 199.384 i/s - 100.000 times in 1.350705s 0.494546s 1.358399s 0.501544s stream 74.082 201.896 73.861 197.611 i/s - 100.000 times in 1.349858s 0.495304s 1.353894s 0.506045s Comparison: dom master: 190.2 i/s master(YJIT): 184.1 i/s - 1.03x slower rexml 3.2.6: 72.3 i/s - 2.63x slower 3.2.6(YJIT): 71.7 i/s - 2.65x slower sax master: 202.6 i/s master(YJIT): 199.3 i/s - 1.02x slower rexml 3.2.6: 74.2 i/s - 2.73x slower 3.2.6(YJIT): 73.3 i/s - 2.76x slower pull master: 202.2 i/s master(YJIT): 199.4 i/s - 1.01x slower rexml 3.2.6: 74.0 i/s - 2.73x slower 3.2.6(YJIT): 73.6 i/s - 2.75x slower stream master: 201.9 i/s master(YJIT): 197.6 i/s - 1.02x slower rexml 3.2.6: 74.1 i/s - 2.73x slower 3.2.6(YJIT): 73.9 i/s - 2.73x slower ```
1 parent 9f25332 commit bd2b3c4

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

benchmark/parse_cdata.yaml

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
loop_count: 100
2+
contexts:
3+
- gems:
4+
rexml: 3.2.6
5+
require: false
6+
prelude: require 'rexml'
7+
- name: master
8+
prelude: |
9+
$LOAD_PATH.unshift(File.expand_path("lib"))
10+
require 'rexml'
11+
- name: 3.2.6(YJIT)
12+
gems:
13+
rexml: 3.2.6
14+
require: false
15+
prelude: |
16+
require 'rexml'
17+
RubyVM::YJIT.enable
18+
- name: master(YJIT)
19+
prelude: |
20+
$LOAD_PATH.unshift(File.expand_path("lib"))
21+
require 'rexml'
22+
RubyVM::YJIT.enable
23+
24+
prelude: |
25+
require 'rexml/document'
26+
require 'rexml/parsers/sax2parser'
27+
require 'rexml/parsers/pullparser'
28+
require 'rexml/parsers/streamparser'
29+
require 'rexml/streamlistener'
30+
31+
def build_xml(n_depth)
32+
xml = "<?xml version=\"1.0\"?>\n" +
33+
"<root>Test</root>\n" +
34+
"<!" + "[CDATA[" * n_depth + "]]>\n"
35+
end
36+
xml = build_xml(100000)
37+
38+
class Listener
39+
include REXML::StreamListener
40+
end
41+
42+
benchmark:
43+
'dom' : REXML::Document.new(xml)
44+
'sax' : REXML::Parsers::SAX2Parser.new(xml).parse
45+
'pull' : |
46+
parser = REXML::Parsers::PullParser.new(xml)
47+
while parser.has_next?
48+
parser.pull
49+
end
50+
'stream' : REXML::Parsers::StreamParser.new(xml, Listener.new).parse

0 commit comments

Comments
 (0)