@@ -59,9 +59,9 @@ <h2>Build HTML documents</h2>
59
59
< p > Numeric results (higher is better):</ p >
60
60
< table class ="normaltbl ">
61
61
< tr > < th > Implementation</ th > < th > Score</ th > < th > Error</ th > < th > Unit</ th > </ tr >
62
- < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 335, 609</ td > < td class ="number "> ±9, 416</ td > < td > ops/s</ td > </ tr >
63
- < tr > < td > Css4j DOM</ td > < td class ="number "> 328, 637</ td > < td class ="number "> ±1, 920</ td > < td > ops/s</ td > </ tr >
64
- < tr > < td > JDK</ td > < td class ="number "> 333, 742</ td > < td class ="number "> ±3, 079</ td > < td > ops/s</ td > </ tr >
62
+ < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 335. 609</ td > < td class ="number "> ±9. 416</ td > < td > ops/s</ td > </ tr >
63
+ < tr > < td > Css4j DOM</ td > < td class ="number "> 328. 637</ td > < td class ="number "> ±1. 920</ td > < td > ops/s</ td > </ tr >
64
+ < tr > < td > JDK</ td > < td class ="number "> 333. 742</ td > < td class ="number "> ±3. 079</ td > < td > ops/s</ td > </ tr >
65
65
</ table >
66
66
< p > If one looks at the error figures, the three implementations are somewhat even in this test. Plain DOM4J is not included in the benchmark,
67
67
as it cannot be used with < code > HtmlDocumentBuilder</ code > .</ p >
@@ -73,11 +73,11 @@ <h2>Build small XML documents</h2>
73
73
< p > Numeric results (higher is better):</ p >
74
74
< table class ="normaltbl ">
75
75
< tr > < th > Implementation</ th > < th > Score</ th > < th > Error</ th > < th > Unit</ th > </ tr >
76
- < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 505, 418</ td > < td class ="number "> ±20, 569</ td > < td > ops/s</ td > </ tr >
77
- < tr > < td > Css4j DOM</ td > < td class ="number "> 486, 341</ td > < td class ="number "> ±5, 949</ td > < td > ops/s</ td > </ tr >
78
- < tr > < td > DOM4J</ td > < td class ="number "> 547, 620</ td > < td class ="number "> ±12, 901</ td > < td > ops/s</ td > </ tr >
79
- < tr > < td > JDK (XMLDocumentBuilder)</ td > < td class ="number "> 530, 703</ td > < td class ="number "> ±7, 089</ td > < td > ops/s</ td > </ tr >
80
- < tr > < td > JDK</ td > < td class ="number "> 542, 871</ td > < td class ="number "> ±12, 360</ td > < td > ops/s</ td > </ tr >
76
+ < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 505. 418</ td > < td class ="number "> ±20. 569</ td > < td > ops/s</ td > </ tr >
77
+ < tr > < td > Css4j DOM</ td > < td class ="number "> 486. 341</ td > < td class ="number "> ±5. 949</ td > < td > ops/s</ td > </ tr >
78
+ < tr > < td > DOM4J</ td > < td class ="number "> 547. 620</ td > < td class ="number "> ±12. 901</ td > < td > ops/s</ td > </ tr >
79
+ < tr > < td > JDK (XMLDocumentBuilder)</ td > < td class ="number "> 530. 703</ td > < td class ="number "> ±7. 089</ td > < td > ops/s</ td > </ tr >
80
+ < tr > < td > JDK</ td > < td class ="number "> 542. 871</ td > < td class ="number "> ±12. 360</ td > < td > ops/s</ td > </ tr >
81
81
</ table >
82
82
</ div >
83
83
< div class ="tema " id ="xml-build ">
@@ -87,11 +87,11 @@ <h2>Build XML documents</h2>
87
87
< p > Numeric results (higher is better):</ p >
88
88
< table class ="normaltbl ">
89
89
< tr > < th > Implementation</ th > < th > Score</ th > < th > Error</ th > < th > Unit</ th > </ tr >
90
- < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 90, 796</ td > < td class ="number "> ±1, 193</ td > < td > ops/s</ td > </ tr >
91
- < tr > < td > Css4j DOM</ td > < td class ="number "> 85, 990</ td > < td class ="number "> ±0, 764</ td > < td > ops/s</ td > </ tr >
92
- < tr > < td > DOM4J</ td > < td class ="number "> 113, 444</ td > < td class ="number "> ±0, 504</ td > < td > ops/s</ td > </ tr >
93
- < tr > < td > JDK (XMLDocumentBuilder)</ td > < td class ="number "> 91, 828</ td > < td class ="number "> ±1, 119</ td > < td > ops/s</ td > </ tr >
94
- < tr > < td > JDK</ td > < td class ="number "> 120, 095</ td > < td class ="number "> ±0, 846</ td > < td > ops/s</ td > </ tr >
90
+ < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 90. 796</ td > < td class ="number "> ±1. 193</ td > < td > ops/s</ td > </ tr >
91
+ < tr > < td > Css4j DOM</ td > < td class ="number "> 85. 990</ td > < td class ="number "> ±0. 764</ td > < td > ops/s</ td > </ tr >
92
+ < tr > < td > DOM4J</ td > < td class ="number "> 113. 444</ td > < td class ="number "> ±0. 504</ td > < td > ops/s</ td > </ tr >
93
+ < tr > < td > JDK (XMLDocumentBuilder)</ td > < td class ="number "> 91. 828</ td > < td class ="number "> ±1. 119</ td > < td > ops/s</ td > </ tr >
94
+ < tr > < td > JDK</ td > < td class ="number "> 120. 095</ td > < td class ="number "> ±0. 846</ td > < td > ops/s</ td > </ tr >
95
95
</ table >
96
96
</ div >
97
97
< div class ="tema " id ="traverse-next ">
@@ -101,9 +101,9 @@ <h2>DOM traversal: <code>getFirstChild()/getNextSibling()</code></h2>
101
101
< p > Numeric results (higher is better):</ p >
102
102
< table class ="normaltbl ">
103
103
< tr > < th > Implementation</ th > < th > Score</ th > < th > Error</ th > < th > Unit</ th > </ tr >
104
- < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 238, 888</ td > < td class ="number "> ±14, 212</ td > < td > ops/s</ td > </ tr >
105
- < tr > < td > Css4j DOM</ td > < td class ="number "> 3098, 809</ td > < td class ="number "> ±48, 866</ td > < td > ops/s</ td > </ tr >
106
- < tr > < td > JDK</ td > < td class ="number "> 6193, 611</ td > < td class ="number "> ±44, 107</ td > < td > ops/s</ td > </ tr >
104
+ < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 238. 888</ td > < td class ="number "> ±14. 212</ td > < td > ops/s</ td > </ tr >
105
+ < tr > < td > Css4j DOM</ td > < td class ="number "> 3098. 809</ td > < td class ="number "> ±48. 866</ td > < td > ops/s</ td > </ tr >
106
+ < tr > < td > JDK</ td > < td class ="number "> 6193. 611</ td > < td class ="number "> ±44. 107</ td > < td > ops/s</ td > </ tr >
107
107
</ table >
108
108
< p > < em > Note:</ em > for unknown reasons, the usual procedure to build the JDK document with a < code > DocumentBuilderFactory</ code > could not be used to initialize the document
109
109
traversed in the benchmark, as that document is somehow left in an inconsistent state with no child nodes; this happened with the initialization code being executed in a
@@ -118,9 +118,9 @@ <h2>DOM traversal: <code>getLastChild()/getPreviousSibling()</code></h2>
118
118
< p > Numeric results (higher is better):</ p >
119
119
< table class ="normaltbl ">
120
120
< tr > < th > Implementation</ th > < th > Score</ th > < th > Error</ th > < th > Unit</ th > </ tr >
121
- < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 208, 244</ td > < td class ="number "> ±48, 552</ td > < td > ops/s</ td > </ tr >
122
- < tr > < td > Css4j DOM</ td > < td class ="number "> 2951, 919</ td > < td class ="number "> ±241, 858</ td > < td > ops/s</ td > </ tr >
123
- < tr > < td > JDK</ td > < td class ="number "> 6717, 898</ td > < td class ="number "> ±92, 711</ td > < td > ops/s</ td > </ tr >
121
+ < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 208. 244</ td > < td class ="number "> ±48. 552</ td > < td > ops/s</ td > </ tr >
122
+ < tr > < td > Css4j DOM</ td > < td class ="number "> 2951. 919</ td > < td class ="number "> ±241. 858</ td > < td > ops/s</ td > </ tr >
123
+ < tr > < td > JDK</ td > < td class ="number "> 6717. 898</ td > < td class ="number "> ±92. 711</ td > < td > ops/s</ td > </ tr >
124
124
</ table >
125
125
< p > The Css4j-DOM4J results are representative for DOM4J as well.</ p >
126
126
</ div >
@@ -131,8 +131,8 @@ <h2>DOM traversal: <code>NodeIterator</code></h2>
131
131
< p > Numeric results (higher is better):</ p >
132
132
< table class ="normaltbl ">
133
133
< tr > < th > Implementation</ th > < th > Score</ th > < th > Error</ th > < th > Unit</ th > </ tr >
134
- < tr > < td > Css4j DOM</ td > < td class ="number "> 2241, 289</ td > < td class ="number "> ±47, 954</ td > < td > ops/s</ td > </ tr >
135
- < tr > < td > JDK</ td > < td class ="number "> 4564, 023</ td > < td class ="number "> ±123, 393</ td > < td > ops/s</ td > </ tr >
134
+ < tr > < td > Css4j DOM</ td > < td class ="number "> 2241. 289</ td > < td class ="number "> ±47. 954</ td > < td > ops/s</ td > </ tr >
135
+ < tr > < td > JDK</ td > < td class ="number "> 4564. 023</ td > < td class ="number "> ±123. 393</ td > < td > ops/s</ td > </ tr >
136
136
</ table >
137
137
< p > DOM4J is not included as it lacks a < code > NodeIterator</ code > .</ p >
138
138
< p > < em > Note:</ em > sometimes the < code > NodeIterator</ code > created by the JDK is in an inconsistent state, and fails with an exception like:</ p >
@@ -153,8 +153,8 @@ <h2>DOM traversal: <code>TreeWalker</code></h2>
153
153
< p > Numeric results (higher is better):</ p >
154
154
< table class ="normaltbl ">
155
155
< tr > < th > Implementation</ th > < th > Score</ th > < th > Error</ th > < th > Unit</ th > </ tr >
156
- < tr > < td > Css4j DOM</ td > < td class ="number "> 2229, 978</ td > < td class ="number "> ±44, 438</ td > < td > ops/s</ td > </ tr >
157
- < tr > < td > JDK</ td > < td class ="number "> 4662, 251</ td > < td class ="number "> ±95, 975</ td > < td > ops/s</ td > </ tr >
156
+ < tr > < td > Css4j DOM</ td > < td class ="number "> 2229. 978</ td > < td class ="number "> ±44. 438</ td > < td > ops/s</ td > </ tr >
157
+ < tr > < td > JDK</ td > < td class ="number "> 4662. 251</ td > < td class ="number "> ±95. 975</ td > < td > ops/s</ td > </ tr >
158
158
</ table >
159
159
< p > DOM4J provides no < code > TreeWalker</ code > .</ p >
160
160
</ div >
@@ -166,8 +166,8 @@ <h2>DOM traversal: <code>elementIterator()</code></h2>
166
166
< p > Numeric results (higher is better):</ p >
167
167
< table class ="normaltbl ">
168
168
< tr > < th > Implementation</ th > < th > Score</ th > < th > Error</ th > < th > Unit</ th > </ tr >
169
- < tr > < td > Css4j DOM</ td > < td class ="number "> 1973, 655</ td > < td class ="number "> ±13, 820</ td > < td > ops/s</ td > </ tr >
170
- < tr > < td > DOM4J</ td > < td class ="number "> 522, 078</ td > < td class ="number "> ±8, 523</ td > < td > ops/s</ td > </ tr >
169
+ < tr > < td > Css4j DOM</ td > < td class ="number "> 1973. 655</ td > < td class ="number "> ±13. 820</ td > < td > ops/s</ td > </ tr >
170
+ < tr > < td > DOM4J</ td > < td class ="number "> 522. 078</ td > < td class ="number "> ±8. 523</ td > < td > ops/s</ td > </ tr >
171
171
</ table >
172
172
< p > The JDK's DOM provides no element iterator.</ p >
173
173
</ div >
@@ -180,10 +180,10 @@ <h2>DOM traversal: <code>getElementsByTagName()</code></h2>
180
180
< p > Numeric results (higher is better):</ p >
181
181
< table class ="normaltbl ">
182
182
< tr > < th > Implementation</ th > < th > Score</ th > < th > Error</ th > < th > Unit</ th > </ tr >
183
- < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 463, 847</ td > < td class ="number "> ±3, 358</ td > < td > ops/s</ td > </ tr >
184
- < tr > < td > Css4j DOM</ td > < td class ="number "> 2, 153</ td > < td class ="number "> ±0, 087</ td > < td > ops/s</ td > </ tr >
185
- < tr > < td > Css4j DOM (iterator)</ td > < td class ="number "> 1532, 235</ td > < td class ="number "> ±59, 400</ td > < td > ops/s</ td > </ tr >
186
- < tr > < td > JDK</ td > < td class ="number "> 2002, 057</ td > < td class ="number "> ±82, 689</ td > < td > ops/s</ td > </ tr >
183
+ < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 463. 847</ td > < td class ="number "> ±3. 358</ td > < td > ops/s</ td > </ tr >
184
+ < tr > < td > Css4j DOM</ td > < td class ="number "> 2. 153</ td > < td class ="number "> ±0. 087</ td > < td > ops/s</ td > </ tr >
185
+ < tr > < td > Css4j DOM (iterator)</ td > < td class ="number "> 1532. 235</ td > < td class ="number "> ±59. 400</ td > < td > ops/s</ td > </ tr >
186
+ < tr > < td > JDK</ td > < td class ="number "> 2002. 057</ td > < td class ="number "> ±82. 689</ td > < td > ops/s</ td > </ tr >
187
187
</ table >
188
188
< p > < em > Note:</ em > the iterator is documented as the recommended way to traverse the < a href ="https://css4j.github.io/api/3/io/sf/carte/doc/dom/ElementList.html "> < code > ElementList</ code > </ a > in css4j since version 3.2. Css4j versions prior to 3.2 perform much better in this benchmark,
189
189
but the implementation was switched to one that is more lightweight (and the iterator performance is good enough).</ p >
@@ -196,9 +196,9 @@ <h2>DOM modification: <code>appendChild()/removeChild()</code></h2>
196
196
< p > Numeric results (higher is better):</ p >
197
197
< table class ="normaltbl ">
198
198
< tr > < th > Implementation</ th > < th > Score</ th > < th > Error</ th > < th > Unit</ th > </ tr >
199
- < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 115, 780</ td > < td class ="number "> ±1, 609</ td > < td > ops/s</ td > </ tr >
200
- < tr > < td > Css4j DOM</ td > < td class ="number "> 440, 383</ td > < td class ="number "> ±6, 933</ td > < td > ops/s</ td > </ tr >
201
- < tr > < td > JDK</ td > < td class ="number "> 791, 273</ td > < td class ="number "> ±8, 898</ td > < td > ops/s</ td > </ tr >
199
+ < tr > < td > Css4j-DOM4J</ td > < td class ="number "> 115. 780</ td > < td class ="number "> ±1. 609</ td > < td > ops/s</ td > </ tr >
200
+ < tr > < td > Css4j DOM</ td > < td class ="number "> 440. 383</ td > < td class ="number "> ±6. 933</ td > < td > ops/s</ td > </ tr >
201
+ < tr > < td > JDK</ td > < td class ="number "> 791. 273</ td > < td class ="number "> ±8. 898</ td > < td > ops/s</ td > </ tr >
202
202
</ table >
203
203
</ div >
204
204
< div class ="tema " id ="analysis ">
0 commit comments