Script Preparation code:
x
 
// language=HTML
const html = `
    <!-- article out start -->
    <article>
        <!-- article in start -->
        <h1>Lorem ipsum</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cumque, nostrum.</p>
        <!-- article in end -->
    </article>
    <!-- article out end -->
    <!-- article out start -->
    <article>
        <!-- article in start -->
        <h1>Lorem ipsum</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cumque, nostrum.</p>
        <!-- article in end -->
    </article>
    <!-- article out end -->
    <!-- article out start -->
    <article>
        <!-- article in start -->
        <h1>Lorem ipsum</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cumque, nostrum.</p>
        <!-- article in end -->
    </article>
    <!-- article out end -->
`;
const template = document.createElement('template');
template.innerHTML = html;
window.testTemplate = template;
Tests:
  • Traverse function

     
    const elements = [];
    function traverse(node) {
        if (!node) return;
        if (node.nodeType === Node.ELEMENT_NODE) {
            elements.push(node);
        }
        traverse(node.nextElementSibling);
        traverse(node.firstElementChild);
    }
    traverse(testTemplate.content.firstElementChild);
    if (elements.length !== 9) throw new Error(`Expected 9 elements, got ${elements.length}`);
  • NodeIterator with filter function

     
    const nodeIterator = document.createNodeIterator(
        testTemplate.content,
        NodeFilter.SHOW_ALL,
        {
            acceptNode(node) {
                if (node.nodeType === Node.ELEMENT_NODE) {
                    return NodeFilter.FILTER_ACCEPT;
                }
                return NodeFilter.FILTER_REJECT;
            }
        }
    );
    const elements = [];
    while (nodeIterator.nextNode()) {
        elements.push(nodeIterator.currentNode);
    }
    if (elements.length !== 9) throw new Error(`Expected 9 elements, got ${elements.length}`);
  • NodeIterator with filter param

     
    const nodeIterator = document.createNodeIterator(
        testTemplate.content,
        NodeFilter.SHOW_ELEMENT
    );
    const elements = [];
    while (nodeIterator.nextNode()) {
        elements.push(nodeIterator.currentNode);
    }
    if (elements.length !== 9) throw new Error(`Expected 9 elements, got ${elements.length}`);
  • TreeWalker with filter function

     
    const treeWalker = document.createTreeWalker(
        testTemplate.content,
        NodeFilter.SHOW_ALL,
        {
            acceptNode(node) {
                if (node.nodeType === Node.ELEMENT_NODE) {
                    return NodeFilter.FILTER_ACCEPT;
                }
                return NodeFilter.FILTER_REJECT;
            }
        }
    );
    const elements = [];
    while (treeWalker.nextNode()) {
        elements.push(treeWalker.currentNode);
    }
    if (elements.length !== 9) throw new Error(`Expected 9 elements, got ${elements.length}`);
  • TreeWalker with filter param

     
    const treeWalker = document.createTreeWalker(
        testTemplate.content,
        NodeFilter.SHOW_ELEMENT
    );
    const elements = [];
    while (treeWalker.nextNode()) {
        elements.push(treeWalker.currentNode);
    }
    if (elements.length !== 9) throw new Error(`Expected 9 elements, got ${elements.length}`);
Rendered benchmark preparation results:

Suite status: <idle, ready to run>

Previous results

Experimental features:

  • Test case name Result
    Traverse function
    NodeIterator with filter function
    NodeIterator with filter param
    TreeWalker with filter function
    TreeWalker with filter param

    Fastest: N/A

    Slowest: N/A

Latest run results:
Run details: (Test run date: 6 months ago)
Mozilla/5.0 (X11; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0
Firefox 131 on Linux
View result in a separate tab
Test name Executions per second
Traverse function 4022718.0 Ops/sec
NodeIterator with filter function 103098.7 Ops/sec
NodeIterator with filter param 1703766.1 Ops/sec
TreeWalker with filter function 95947.6 Ops/sec
TreeWalker with filter param 1571171.5 Ops/sec