<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Fictional DOM</title>
</head>
<body>
<div class="header">
<h1>Welcome to the Fictional DOM</h1>
</div>
<div class="container">
<div class="box">Box 1</div>
<div class="box">Box 2</div>
<div class="box">Box 3</div>
<div class="box">Box 4</div>
<div class="box">Box 5</div>
<div class="box">Box 6</div>
<div class="box">Box 7</div>
<div class="box">Box 8</div>
<div class="box">Box 9</div>
<div class="box">Box 10</div>
<div class="box">Box 11</div>
<div class="box">Box 12</div>
<div class="box">Box 13</div>
<div class="box">Box 14</div>
<div class="box">Box 15</div>
<div class="box">Box 16</div>
<div class="box">Box 17</div>
<div class="box">Box 18</div>
<div class="box">Box 19</div>
<div class="box">Box 20</div>
<div class="unique-box-1">Unique Box 1</div>
<div class="unique-box-2">Unique Box 2</div>
<div class="unique-box-3">Unique Box 3</div>
<div class="unique-box-4">Unique Box 4</div>
<div class="unique-box-5">Unique Box 5</div>
<div class="unique-box-6">Unique Box 6</div>
<div class="unique-box-7">Unique Box 7</div>
<div class="unique-box-8">Unique Box 8</div>
<div class="unique-box-9">Unique Box 9</div>
<div class="unique-box-10">Unique Box 10</div>
<div id="unique-box-11">Unique Box 11</div>
<div id="unique-box-12">Unique Box 12</div>
<div id="unique-box-13">Unique Box 13</div>
<div id="unique-box-14">Unique Box 14</div>
<div id="unique-box-15">Unique Box 15</div>
<div id="unique-box-16">Unique Box 16</div>
<div id="unique-box-17">Unique Box 17</div>
<div id="unique-box-18">Unique Box 18</div>
<div id="unique-box-19">Unique Box 19</div>
<div id="unique-box-20">Unique Box 20</div>
</div>
<div class="footer">
<p>Footer Content</p>
</div>
</body>
</html>
/*your preparation JavaScript code goes here
To execute async code during the script preparation, wrap it as function globalMeasureThatScriptPrepareFunction, example:*/
async function globalMeasureThatScriptPrepareFunction() {
// This function is optional, feel free to remove it.
// await someThing();
}
const allDivs = document.querySelectorAll("div")
function getElementsByXPath(xpath) {
const result = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null);
const elements = [];
let node = result.iterateNext();
while (node) {
elements.push(node);
node = result.iterateNext();
}
return elements;
}
const xpath = "//div"; //
const selectedElements = getElementsByXPath(xpath);
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
QuerySelectorAll | |
getElementByXpath |
Test name | Executions per second |
---|---|
QuerySelectorAll | 22683404.0 Ops/sec |
getElementByXpath | 439474.7 Ops/sec |
The provided benchmark compares two different methods for selecting HTML elements in a DOM structure: document.querySelectorAll
and an XPath-based approach using document.evaluate
. Each method is tested for performance, specifically how many times each can execute in a second, providing a clear performance indication based on the number of elements selected.
document.querySelectorAll
const allDivs = document.querySelectorAll("div")
Description:
<div>
elements in the document.Performance Results:
Pros:
querySelectorAll
is significantly faster than the XPath method.Cons:
document.evaluate
function getElementsByXPath(xpath) {
const result = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null);
const elements = [];
let node = result.iterateNext();
while (node) {
elements.push(node);
node = result.iterateNext();
}
return elements;
}
const xpath = "//div";
const selectedElements = getElementsByXPath(xpath);
Description:
<div>
elements using an XPath expression.Performance Results:
Pros:
Cons:
querySelectorAll
.querySelectorAll
is preferred due to its speed and simplicity. However, if complex selections involving relationships are needed, XPath becomes a favorable choice despite its slower performance.document.getElementsByClassName
: Specifically selects elements by their class name, returning a live HTMLCollection.document.getElementById
: Selects a single element by its unique ID, and is very fast even if it can only return one element.document.querySelector
: Similar to querySelectorAll
, but returns only the first matching element, which can be more performant if only a single element is needed.This benchmark helps developers understand the trade-offs involved in selecting elements in JavaScript and guides them toward the most appropriate method for their specific application requirements.