xpath-vs-selectorall

Benchmark created by Ian Sutherland on


Description

DOM Queries for xpath vs selectors vs tags.

Preparation HTML

<div>
  <p>
    <ul>
      <li>
        <a class="test"></a>
      </li>
    </ul>
  </p>
</div>
<div>
  <p>
    <ul>
      <li>
        <a class="meh"></a>
      </li>
    </ul>
  </p>
</div>
<div>
  <p>
    <ul>
      <li>
        <a class="test"></a>
      </li>
    </ul>
  </p>
</div>
<div>
  <p>
    <ul>
      <li>
        <a class="test"></a>
      </li>
    </ul>
  </p>
</div>
<div>
  <p>
    <ul>
      <li>
        <a class="wtf"></a>
      </li>
    </ul>
  </p>
</div>
<div>
  <p>
    <ul>
      <li>
        <a class="test"></a>
      </li>
    </ul>
  </p>
</div>
<div>
  <p>
    <ul>
      <li>
        <a class="test"></a>
      </li>
    </ul>
  </p>
</div>
<div>
  <p>
    <ul>
      <li>
        <a class="test"></a>
      </li>
    </ul>
  </p>
</div>
<div>
  <p>
    <ul>
      <li>
        <a class="test"></a>
      </li>
    </ul>
  </p>
</div>
<div>
  <p>
    <ul>
      <li>
        <a class="test"></a>
      </li>
    </ul>
  </p>
</div>
<div id="res">
  test result
</div>

Setup

var count;

Test runner

Ready to run.

Testing in
TestOps/sec
xpath
count = document.evaluate("//a[@class='test']", document.documentElement, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotLength;

document.getElementById('res').innerHTML = count;
ready
querySelector
count = document.querySelectorAll('a.test').length;
document.getElementById('res').innerHTML = count;
ready
tagName
var arrNodes = document.getElementsByTagName('a');
var resNodes = [];
var i = arrNodes.length;
while (i--) {
  var n = arrNodes[i];
  if (n.getAttribute('class') == 'test') {
    resNodes.push(n);
  }
}
count = resNodes.length;
document.getElementById('res').innerHTML = count;
ready

Revisions

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

  • Revision 1: published by Ian Sutherland on
  • Revision 2: published on
  • Revision 3: published by Divya Manian on
  • Revision 4: published by Craig Patik on
  • Revision 5: published by Mikhail Kalashnik on
  • Revision 6: published by Ian Sutherland on