HTML Preparation code:
x
 
1
<html>
2
3
<body>
4
    <div id='test'>
5
        <div class='item' id='a' name='a'>a</div>
6
        <div class='item' id='b' name='b'>b</div>
7
        <div class='item' id='c' name='c'>c</div>
8
    </div>
9
</body>
10
11
</html>
Script Preparation code:
 
var parent = document.getElementById('test');
var store1 = [];
var store2 = [];
parent.childNodes.forEach(function (node) {
  if ( node.nodeName !== '#text') {
  store1.push( node );
  store2.push( { name: node.attributes.name.value } );
  }
});
for (let i = store2.length-1; i >= 0; i--) {
  let n = store2[i].name;
  console.log("R",n)
}
Tests:
  • fastest iter childelements

     
    let elem = parent.firstElementChild;
    do {
      let n = elem.attributes.name.value;
    } while (elem = elem.nextElementSibling)
  • tag name

     
    let children = parent.getElementsByTagName('div');
    for (let i = 0; i < children.length; i++) {
      let n = children[i].attributes.name.value;
    }
  • class name

     
    let children = parent.getElementsByClassName('item')
    for (let i = 0; i < children.length; i++) {
      let n = children[i].attributes.name.value;
    }
  • id

     
    let n1 = document.getElementById('a').attributes.name.value;
    let n2 = document.getElementById('b').attributes.name.value;
    let n3 = document.getElementById('c').attributes.name.value;
  • array of node

     
    for (let i = 0; i < store1.length; i++) {
      let n = store1[i].attributes.name.value;
    }
  • array item

     
    for (let i = 0; i < store2.length; i++) {
      let n = store2[i].name;
    }
  • fastest iter childelements + getAttribute

     
    let elem = parent.firstElementChild;
    do {
      let n = elem.getAttribute('name');
    } while (elem = elem.nextElementSibling)
  • fastest iter childelements + nodeValue

     
    let elem = parent.firstElementChild;
    do {
      let n = elem.nodeValue;
    } while (elem = elem.nextElementSibling)
  • fastest iter childelements + textContent

     
    let elem = parent.firstElementChild;
    do {
      let n = elem.textContent;
    } while (elem = elem.nextElementSibling)
  • fastest iter childelements + getAttributeNode

     
    let elem = parent.firstElementChild;
    do {
      let n = elem.getAttributeNode('name').value;
    } while (elem = elem.nextElementSibling)
  • tag name--

     
    let children = parent.getElementsByTagName('div');
    for (let i = children.length-1; i >= 0; i--) {
      let n = children[i].attributes.name.value;
    }
  • class name--

     
    let children = parent.getElementsByClassName('item')
    for (let i = children.length-1; i >= 0; i--) {
      let n = children[i].attributes.name.value;
    }
  • queryselectorall class--

     
    let children = parent.querySelectorAll('.item')
    for (let i = children.length-1; i >= 0; i--) {
      let n = children[i].attributes.name.value;
    }
  • queryselectorall tag--

     
    let children = parent.querySelectorAll('div')
    for (let i = children.length-1; i >= 0; i--) {
      let n = children[i].attributes.name.value;
    }
  • array item--

     
    for (let i = store2.length-1; i >= 0; i--) {
      let n = store2[i].name;
    }
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    fastest iter childelements
    tag name
    class name
    id
    array of node
    array item
    fastest iter childelements + getAttribute
    fastest iter childelements + nodeValue
    fastest iter childelements + textContent
    fastest iter childelements + getAttributeNode
    tag name--
    class name--
    queryselectorall class--
    queryselectorall tag--
    array item--

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 2 years ago)
Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/110.0
Firefox 110 on Linux
View result in a separate tab
Test name Executions per second
fastest iter childelements 1829338.2 Ops/sec
tag name 1477045.5 Ops/sec
class name 1466709.4 Ops/sec
id 1072931.6 Ops/sec
array of node 2026058.9 Ops/sec
array item 200652032.0 Ops/sec
fastest iter childelements + getAttribute 8877777.0 Ops/sec
fastest iter childelements + nodeValue 14239759.0 Ops/sec
fastest iter childelements + textContent 8403773.0 Ops/sec
fastest iter childelements + getAttributeNode 2757558.2 Ops/sec
tag name-- 1732371.9 Ops/sec
class name-- 1737964.9 Ops/sec
queryselectorall class-- 1146137.8 Ops/sec
queryselectorall tag-- 1117409.2 Ops/sec
array item-- 216271008.0 Ops/sec