HTML Preparation code:
x
 
1
<html>
2
3
<body>
4
    <div id='test'>
5
        <div name='a'></div>
6
        <div name='b'></div>
7
        <div name='c'></div>
8
    </div>
9
</body>
10
11
</html>
Script Preparation code:
 
var parent = document.getElementById('test');
Tests:
  • childNodes foreach

     
    parent.childNodes.forEach(function (node) {
      let n = node;
    });
  • children (direct)

     
    for (let i = 0; i < parent.children.length; i++) {
      let n = parent.children[i];
    }
  • children (into variable)

     
    let children = parent.children;
    for (let i = 0; i < children.length; i++) {
      let n = children[i];
    }
  • children-- (direct)

     
    for (let i = parent.children.length-1; i >= 0; i--) {
      let n = parent.children[i];
    }
  • children-- (into variable)

     
    let children = parent.children;
    for (let i = children.length-1; i >= 0; i--) {
      let n = children[i];
    }
  • ChildNodes for (direct)

     
    for (let i = 0; i < parent.childNodes.length; i++) {
      let n = parent.childNodes[i];
    }
  • ChildNodes for (into variable)

     
    let children = parent.childNodes;
    for (let i = 0; i < children.length; i++) {
      let n = children[i];
    }
  • ChildNodes for-- (direct)

     
    for (let i = parent.childNodes.length-1; i >= 0; i--) {
      let n = parent.childNodes[i];
    }
  • ChildNodes for-- (into variable)

     
    let children = parent.childNodes;
    for (let i = children.length-1; i >= 0; i--) {
      let n = children[i];
    }
  • firstElementChild nextElementChild

     
    let elem = parent.firstElementChild;
    do {
      let n = elem;
    } while (elem = elem.nextElementSibling)
  • lastElementChild previousElementChild

     
    let elem = parent.lastElementChild;
    do {
      let n = elem;
    } while (elem = elem.previousElementSibling)
  • firstChild nextSibling

     
    let elem = parent.firstChild;
    do {
      let n = elem;
    } while (elem = elem.nextSibling)
  • lastChild previousSibling

     
    let elem = parent.lastChild;
    do {
      let n = elem;
    } while (elem = elem.previousSibling)
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    childNodes foreach
    children (direct)
    children (into variable)
    children-- (direct)
    children-- (into variable)
    ChildNodes for (direct)
    ChildNodes for (into variable)
    ChildNodes for-- (direct)
    ChildNodes for-- (into variable)
    firstElementChild nextElementChild
    lastElementChild previousElementChild
    firstChild nextSibling
    lastChild previousSibling

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: one year ago)
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.31
Chrome 117 on Windows
View result in a separate tab
Test name Executions per second
childNodes foreach 629319.8 Ops/sec
children (direct) 849352.2 Ops/sec
children (into variable) 2385627.5 Ops/sec
children-- (direct) 1382130.1 Ops/sec
children-- (into variable) 3051974.8 Ops/sec
ChildNodes for (direct) 446341.5 Ops/sec
ChildNodes for (into variable) 1631156.8 Ops/sec
ChildNodes for-- (direct) 758549.2 Ops/sec
ChildNodes for-- (into variable) 2075338.9 Ops/sec
firstElementChild nextElementChild 5528009.0 Ops/sec
lastElementChild previousElementChild 5510178.5 Ops/sec
firstChild nextSibling 4411911.0 Ops/sec
lastChild previousSibling 4426229.0 Ops/sec