<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
document.querySelectorAll("div.test")
document.querySelectorAll(".test")
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
querySelectorAll tagname | |
querySelectorAll class |
Test name | Executions per second |
---|---|
querySelectorAll tagname | 504705.7 Ops/sec |
querySelectorAll class | 1175956.9 Ops/sec |
The benchmark titled "JS selector functions specificity" evaluates the performance of different ways to select DOM elements using the document.querySelectorAll()
method in JavaScript. Specifically, it tests two different selectors: one using a tag name selector and the other using a class name selector.
Selecting by Tag Name:
document.querySelectorAll("div.test")
div
) and a class selector (.test
). This means it will select all <div>
elements that also have the class test
, which is essentially all the divs created in the HTML preparation code since they all carry the class test
.Selecting by Class Name:
document.querySelectorAll(".test")
test
. Since all the divs are marked with this class, it will select all of them as well.document.querySelectorAll(".test")
) resulted in approximately 1,175,957 executions per second, whereas selecting using the tag name along with the class (document.querySelectorAll("div.test")
) yielded about 504,706 executions per second.Selecting by Class Name (.test
):
<div>
s.Selecting by Tag Name and Class (div.test
):
<div>
elements are selected, which can prevent undesired selections if other elements have the same class.Browser Performance: The benchmark was executed on Chrome 135, which means the results pertain to how this specific browser version handles these operations. Performance may vary on different browsers or versions.
Batching of DOM Elements: When querying multiple elements, using more specific selectors may impose a performance overhead due to the two-stage checking process (first checking the tag, then the class).
Other methods of selecting DOM elements include:
getElementsByClassName(className)
: This method returns a live HTMLCollection of elements with the specified class name. It can be faster for class selections, but it's less flexible than querySelectorAll
since it does not support complex selectors.getElementsByTagName(tagName)
: Similar to getElementsByClassName
, this method retrieves a live HTMLCollection of elements with the specified tag name.find()
with jQuery or similar libraries: If using libraries like jQuery, you can leverage their optimized performance and additional utilities for selecting and manipulating elements.In conclusion, the benchmark highlights the performance differences between two common techniques for selecting DOM elements, with implications for application performance and maintainability in scenarios with numerous element interactions. It serves as a useful reminder of the trade-offs in specificity and performance when selecting elements via JavaScript.