XPath vs. querySelectorAll (v5)

Revision 5 of this benchmark created on


Preparation HTML

<script src="http://wicked-good-xpath.googlecode.com/files/wgxpath.install.js"></script>
<script>wgxpath.install();
function verify(o) {
  var len = o.length || o.snapshotLength;
  if(len!==1)
    throw "Borked output: expected one result, not "+len+".";
  var el = o.snapshotItem?o.snapshotItem(0):o[0];
  if(el.getAttribute("data-note") !== 'target')
    throw "Borked output: found wrong element.";
}
</script>
<div class='adiv'>
  test text inside a div!
</div>
<div class='adiv'>
  test text inside a div!
</div>
<div>
  <div>
    <div class='thediv'>
      test test test test test test
      <span data-note="target">
        this is a span
      </span>
    </div>
  </div>
</div>
<div class='thediv'>
  test text inside a div!
</div>
<div class='adiv'>
  test text inside a div!
</div>
<div>
  <div>
<div class='thediv'>
  test text inside a div!
</div>
</div>
</div>
<h1>HTML Ipsum Presents</h1>
               
<p><strong>Pellentesque habitant morbi tristique</strong> senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. <em>Aenean ultricies mi vitae est.</em> Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, <code>commodo vitae</code>, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. <a href="#">Donec non enim</a> in turpis pulvinar facilisis. Ut felis.</p>

<h2>Header Level 2</h2>
               
<ol>
   <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
   <li>Aliquam tincidunt mauris eu risus.</li>
</ol>

<blockquote><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.</p></blockquote>

<h3>Header Level 3</h3>

<ul>
   <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
   <li>Aliquam tincidunt mauris eu risus.</li>
</ul>

<pre><code>
#header h1 a { 
        display: block; 
        width: 300px; 
        height: 80px; 
}
</code></pre>

Test runner

Ready to run.

Testing in
TestOps/sec
XPath 1
verify(
document.evaluate('//div[@class="user-output"]/div/div/div[@class="thediv"]/span', document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null));
ready
querySelectorAll 1
verify(
document.querySelectorAll('div.user-output > div > div > div[class="thediv"] > span'));
ready
querySelectorAll 2
verify(
document.querySelectorAll('div.user-output > div > div > div.thediv > span'));
ready
XPath 2
verify(
document.evaluate('//div[@class="user-output"]/div/div/div[@class="thediv"]/span', document.body, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null));
ready
XPath 3
verify(
document.evaluate('//div[@class="user-output"]/div/div/div[@class="thediv"]/span', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null));
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.