querySelectorAll vs several getElementsByTagName (v40)

Revision 40 of this benchmark created by Zebulon84 on


Description

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

Preparation HTML

<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>

Test runner

Ready to run.

Testing in
TestOps/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];
}
ready
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];
  }
}
ready

Revisions

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