querySelectorAll vs several getElementsByTagName

JavaScript performance comparison

Revision 40 of this test case created by Zebulon84

Info

Checking if "complex" request to querySelectorAll performs against several getElementsByTagName.

Preparation code

<nav id="menu">
  <ul>
    <li class="first">
      <img scr="icon1.webp">
      <a href="#">item 1</a>
      <kbd>
        ctrl + A
      </kbd>
      <ul>
        <li class="second">
          <img scr="icon1.webp">
          <a href="#">item 1</a>
          <kbd>
            ctrl + X
          </kbd>
        </li>
        <li class="second">
          <img scr="iconb.webp">
          <a href="#">item 2</a>
          <kbd>
            ctrl + Y
          </kbd>
        </li>
        <li class="second">
          <img scr="icon3.webp">
          <a href="#">item 3</a>
          <kbd>
            ctrl + Z
          </kbd>
        </li>
      </ul>
    </li>
    <li class="first">
      <img scr="icon2.webp">
      <a href="#">item 2</a>
      <kbd>
        ctrl + B
      </kbd>
      <ul>
        <li class="second">
          <img scr="icon1.webp">
          <a href="#">item 1</a>
          <kbd>
            ctrl + X
          </kbd>
        </li>
        <li class="second">
          <img scr="iconb.webp">
          <a href="#">item 2</a>
          <kbd>
            ctrl + Y
          </kbd>
        </li>
        <li class="second">
          <img scr="icon3.webp">
          <a href="#">item 3</a>
          <kbd>
            ctrl + Z
          </kbd>
        </li>
      </ul>
    </li>
    <li class="first">
      <img scr="icon3.webp">
      <a href="#">item 3</a>
      <kbd>
        ctrl + C
      </kbd>
      <ul>
        <li class="second">
          <img scr="icon1.webp">
          <a href="#">item 1</a>
          <kbd>
            ctrl + X
          </kbd>
        </li>
        <li class="second">
          <img scr="iconb.webp">
          <a href="#">item 2</a>
          <kbd>
            ctrl + Y
          </kbd>
        </li>
        <li class="second">
          <img scr="icon3.webp">
          <a href="#">item 3</a>
          <kbd>
            ctrl + Z
          </kbd>
        </li>
      </ul>
    </li>
    <li class="first">
      <img scr="icon4.webp">
      <a href="#">item 4</a>
      <kbd>
        ctrl + D
      </kbd>
      <ul>
        <li class="second">
          <img scr="icon1.webp">
          <a href="#">item 1</a>
          <kbd>
            ctrl + X
          </kbd>
        </li>
        <li class="second">
          <img scr="iconb.webp">
          <a href="#">item 2</a>
          <kbd>
            ctrl + Y
          </kbd>
        </li>
        <li class="second">
          <img scr="icon3.webp">
          <a href="#">item 3</a>
          <kbd>
            ctrl + Z
          </kbd>
        </li>
      </ul>
    </li>
    <li class="first">
      <img scr="icon5.webp">
      <a href="#">item 5</a>
      <kbd>
        ctrl + E
      </kbd>
      <ul>
        <li class="second">
          <img scr="icon1.webp">
          <a href="#">item 1</a>
          <kbd>
            ctrl + X
          </kbd>
        </li>
        <li class="second">
          <img scr="iconb.webp">
          <a href="#">item 2</a>
          <kbd>
            ctrl + Y
          </kbd>
        </li>
        <li class="second">
          <img scr="icon3.webp">
          <a href="#">item 3</a>
          <kbd>
            ctrl + Z
          </kbd>
        </li>
      </ul>
    </li>
  </ul>
</nav>

Preparation code output

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
querySelectorAll
var nodes = document.querySelectorAll('.second a, .second kbd'),
    a, i, m;
for (i = 0, m = nodes.length; i < m; i++) {
  a = nodes[i];
}
pending…
getElementsByTagName
var lis = document.getElementsByClassName('second'),
    nodes, a, i, j, m, n;
for (i = 0, m = lis.length; i < m; i++) {
  nodes = lis[i].getElementsByTagName('a');
  for (j = 0, n = nodes.length; j < n; j++) {
    a = nodes[j];
  }
  nodes = lis[i].getElementsByTagName('kbd');
  for (j = 0, n = nodes.length; j < n; j++) {
    a = nodes[j];
  }
}
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment