<div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a'></div><div class='a b'>lol</div><div class='a'></div>
function querySelectorWrapper() {
return !document.querySelector('.b');
}
function classListContainsWrapper(element) {
return element.classList.contains('b');
}
var elementRef = document.querySelector('.b');
querySelectorWrapper();
classListContainsWrapper(elementRef);
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
querySelector | |
classList.contains |
Test name | Executions per second |
---|---|
querySelector | 2213699.5 Ops/sec |
classList.contains | 10624568.0 Ops/sec |
Measuring the performance of two different approaches to checking if an element has a certain class in JavaScript can be a useful benchmark.
What is being tested?
In this case, we are testing two methods:
querySelector
(with CSS selector syntax): This method uses the document.querySelector()
function with a CSS selector to check if an element matches a specific class.classList.contains()
(on the classList
property of an element): This method checks if an element has a certain class by calling the contains()
method on its classList
property.Options being compared
The options being compared are:
querySelector(class)
(CSS selector syntax)classList.some(element)
(on the classList
property)Pros and cons of each approach:
querySelector(class)
(CSS selector syntax):classList.some(element)
:In general, querySelector(class)
offers more flexibility but comes with a potential performance cost. On the other hand, classList.some(element)
provides faster execution and lower memory usage but has limitations in its expressiveness.
Libraries being used
There is no explicit library mentioned in the benchmark definition or individual test cases. However, it's worth noting that both methods rely on the built-in JavaScript functions for DOM manipulation and class checking.
Special JS features or syntax
The benchmark does not mention any special JavaScript features or syntax, such as async/await, promises, or modern syntax features like arrow functions or destructuring.
Other alternatives
If you were to implement this benchmark yourself, some alternative approaches might include:
querySelectorAll()
and then checking the length of the resulting array.Keep in mind that these alternatives may not be as efficient or straightforward as the original querySelector(class)
and classList.contains()
methods, respectively.