<div id="attr2_cls2" class="bar baz"></div>
<div id="attr3_cls3" class="bar baz a" a="a"></div>
<div id="attr4_cls4" class="bar baz a b" a="a" b="b"></div>
<div id="attr5_cls5" class="bar baz a b c" a="a" b="b" c="c"></div>
<div id="attr6_cls6" class="bar baz a b c d" a="a" b="b" c="c" d="d"></div>
<div id="attr7_cls7" class="bar baz a b c d e" a="a" b="b" c="c" d="d" e="e"></div>
<div id="attr8_cls8" class="bar baz a b c d e f" a="a" b="b" c="c" d="d" e="e" f="f"></div>
<div id="attr9_cls9" class="bar baz a b c d e f g" a="a" b="b" c="c" d="d" e="e" f="f" g="g"></div>
<div id="attr10_cls10" class="bar baz a b c d e f g h" a="a" b="b" c="c" d="d" e="e" f="f" g="g" h="h"></div>
<div id="attr11_cls11" class="bar baz a b c d e f g h i" a="a" b="b" c="c" d="d" e="e" f="f" g="g" h="h" i="i"></div>
<div id="attr12_cls12" class="bar baz a b c d e f g h i j" a="a" b="b" c="c" d="d" e="e" f="f" g="g" h="h" i="i" j="j"></div>
<div id="attr13_cls13" class="bar baz a b c d e f g h i j k" a="a" b="b" c="c" d="d" e="e" f="f" g="g" h="h" i="i" j="j" k="k"></div>
<div id="attr14_cls14" class="bar baz a b c d e f g h i j k l" a="a" b="b" c="c" d="d" e="e" f="f" g="g" h="h" i="i" j="j" k="k" l="l"></div>
<div id="attr15_cls15" class="bar baz a b c d e f g h i j k l m" a="a" b="b" c="c" d="d" e="e" f="f" g="g" h="h" i="i" j="j" k="k" l="l" m="m"></div>
<div id="attr16_cls16" class="bar baz a b c d e f g h i j k l m n" a="a" b="b" c="c" d="d" e="e" f="f" g="g" h="h" i="i" j="j" k="k" l="l" m="m" n="n"></div>
<div id="attr17_cls17" class="bar baz a b c d e f g h i j k l m n o" a="a" b="b" c="c" d="d" e="e" f="f" g="g" h="h" i="i" j="j" k="k" l="l" m="m" n="n" o="o"></div>
<div id="attr18_cls18" class="bar baz a b c d e f g h i j k l m n o p" a="a" b="b" c="c" d="d" e="e" f="f" g="g" h="h" i="i" j="j" k="k" l="l" m="m" n="n" o="o" p="p"></div>
<div id="attr19_cls19" class="bar baz a b c d e f g h i j k l m n o p q" a="a" b="b" c="c" d="d" e="e" f="f" g="g" h="h" i="i" j="j" k="k" l="l" m="m" n="n" o="o" p="p" q="q"></div>
<div id="attr20_cls20" class="bar baz a b c d e f g h i j k l m n o p q r" a="a" b="b" c="c" d="d" e="e" f="f" g="g" h="h" i="i" j="j" k="k" l="l" m="m" n="n" o="o" p="p" q="q" r="r"></div>
const attr2_cls2 = document.getElementById("attr2_cls2");
const attr3_cls3 = document.getElementById("attr3_cls3");
const attr4_cls4 = document.getElementById("attr4_cls4");
const attr5_cls5 = document.getElementById("attr5_cls5");
const attr6_cls6 = document.getElementById("attr6_cls6");
const attr7_cls7 = document.getElementById("attr7_cls7");
const attr8_cls8 = document.getElementById("attr8_cls8");
const attr9_cls9 = document.getElementById("attr9_cls9");
const attr10_cls10 = document.getElementById("attr10_cls10");
const attr11_cls11 = document.getElementById("attr11_cls11");
const attr12_cls12 = document.getElementById("attr12_cls12");
const attr13_cls13 = document.getElementById("attr13_cls13");
const attr14_cls14 = document.getElementById("attr14_cls14");
const attr15_cls15 = document.getElementById("attr15_cls15");
const attr16_cls16 = document.getElementById("attr16_cls16");
const attr17_cls17 = document.getElementById("attr17_cls17");
const attr18_cls18 = document.getElementById("attr18_cls18");
const attr19_cls19 = document.getElementById("attr19_cls19");
const attr20_cls20 = document.getElementById("attr20_cls20");
attr2_cls2.hasAttribute("id");
attr2_cls2.classList.contains("bar");
attr3_cls3.hasAttribute("id");
attr3_cls3.classList.contains("bar");
attr4_cls4.hasAttribute("id");
attr4_cls4.classList.contains("bar");
attr5_cls5.hasAttribute("id");
attr5_cls5.classList.contains("bar");
attr6_cls6.hasAttribute("id");
attr6_cls6.classList.contains("bar");
attr7_cls7.hasAttribute("id");
attr7_cls7.classList.contains("bar");
attr8_cls8.hasAttribute("id");
attr8_cls8.classList.contains("bar");
attr9_cls9.hasAttribute("id");
attr9_cls9.classList.contains("bar");
attr10_cls10.hasAttribute("id");
attr10_cls10.classList.contains("bar");
attr11_cls11.hasAttribute("id");
attr11_cls11.classList.contains("bar");
attr12_cls12.hasAttribute("id");
attr12_cls12.classList.contains("bar");
attr13_cls13.hasAttribute("id");
attr13_cls13.classList.contains("bar");
attr14_cls14.hasAttribute("id");
attr14_cls14.classList.contains("bar");
attr15_cls15.hasAttribute("id");
attr15_cls15.classList.contains("bar");
attr16_cls16.hasAttribute("id");
attr16_cls16.classList.contains("bar");
attr17_cls17.hasAttribute("id");
attr17_cls17.classList.contains("bar");
attr18_cls18.hasAttribute("id");
attr18_cls18.classList.contains("bar");
attr19_cls19.hasAttribute("id");
attr19_cls19.classList.contains("bar");
attr20_cls20.hasAttribute("id");
attr20_cls20.classList.contains("bar");
attr3_cls3.hasAttribute("class");
attr3_cls3.classList.contains("baz");
attr3_cls3.hasAttribute("a");
attr3_cls3.classList.contains("a");
attr4_cls4.hasAttribute("b");
attr4_cls4.classList.contains("b");
attr5_cls5.hasAttribute("c");
attr5_cls5.classList.contains("c");
attr6_cls6.hasAttribute("d");
attr6_cls6.classList.contains("d");
attr7_cls7.hasAttribute("e");
attr7_cls7.classList.contains("e");
attr8_cls8.hasAttribute("f");
attr8_cls8.classList.contains("f");
attr9_cls9.hasAttribute("g");
attr9_cls9.classList.contains("g");
attr10_cls10.hasAttribute("h");
attr10_cls10.classList.contains("h");
attr11_cls11.hasAttribute("i");
attr11_cls11.classList.contains("i");
attr12_cls12.hasAttribute("j");
attr12_cls12.classList.contains("j");
attr13_cls13.hasAttribute("k");
attr13_cls13.classList.contains("k");
attr14_cls14.hasAttribute("l");
attr14_cls14.classList.contains("l");
attr15_cls15.hasAttribute("m");
attr15_cls15.classList.contains("m");
attr16_cls16.hasAttribute("n");
attr16_cls16.classList.contains("n");
attr17_cls17.hasAttribute("o");
attr17_cls17.classList.contains("o");
attr18_cls18.hasAttribute("p");
attr18_cls18.classList.contains("p");
attr19_cls19.hasAttribute("q");
attr19_cls19.classList.contains("q");
attr20_cls20.hasAttribute("r");
attr20_cls20.classList.contains("r");
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
hasAttribute attr2_cls2 first | |
classList attr2_cls2 first | |
hasAttribute attr3_cls3 first | |
classList attr3_cls3 first | |
hasAttribute attr4_cls4 first | |
classList attr4_cls4 first | |
hasAttribute attr5_cls5 first | |
classList attr5_cls5 first | |
hasAttribute attr6_cls6 first | |
classList attr6_cls6 first | |
hasAttribute attr7_cls7 first | |
classList attr7_cls7 first | |
hasAttribute attr8_cls8 first | |
classList attr8_cls8 first | |
hasAttribute attr9_cls9 first | |
classList attr9_cls9 first | |
hasAttribute attr10_cls10 first | |
classList attr10_cls10 first | |
hasAttribute attr11_cls11 first | |
classList attr11_cls11 first | |
hasAttribute attr12_cls12 first | |
classList attr12_cls12 first | |
hasAttribute attr13_cls13 first | |
classList attr13_cls13 first | |
hasAttribute attr14_cls14 first | |
classList attr14_cls14 first | |
hasAttribute attr15_cls15 first | |
classList attr15_cls15 first | |
hasAttribute attr16_cls16 first | |
classList attr16_cls16 first | |
hasAttribute attr17_cls17 first | |
classList attr17_cls17 first | |
hasAttribute attr18_cls18 first | |
classList attr18_cls18 first | |
hasAttribute attr19_cls19 first | |
classList attr19_cls19 first | |
hasAttribute attr20_cls20 first | |
classList attr20_cls20 first | |
hasAttribute attr2_cls2 last | |
classList attr2_cls2 last | |
hasAttribute attr3_cls3 last | |
classList attr3_cls3 last | |
hasAttribute attr4_cls4 last | |
classList attr4_cls4 last | |
hasAttribute attr5_cls5 last | |
classList attr5_cls5 last | |
hasAttribute attr6_cls6 last | |
classList attr6_cls6 last | |
hasAttribute attr7_cls7 last | |
classList attr7_cls7 last | |
hasAttribute attr8_cls8 last | |
classList attr8_cls8 last | |
hasAttribute attr9_cls9 last | |
classList attr9_cls9 last | |
hasAttribute attr10_cls10 last | |
classList attr10_cls10 last | |
hasAttribute attr11_cls11 last | |
classList attr11_cls11 last | |
hasAttribute attr12_cls12 last | |
classList attr12_cls12 last | |
hasAttribute attr13_cls13 last | |
classList attr13_cls13 last | |
hasAttribute attr14_cls14 last | |
classList attr14_cls14 last | |
hasAttribute attr15_cls15 last | |
classList attr15_cls15 last | |
hasAttribute attr16_cls16 last | |
classList attr16_cls16 last | |
hasAttribute attr17_cls17 last | |
classList attr17_cls17 last | |
hasAttribute attr18_cls18 last | |
classList attr18_cls18 last | |
hasAttribute attr19_cls19 last | |
classList attr19_cls19 last | |
hasAttribute attr20_cls20 last | |
classList attr20_cls20 last |
Test name | Executions per second |
---|---|
hasAttribute attr2_cls2 first | 35542548.0 Ops/sec |
classList attr2_cls2 first | 36445720.0 Ops/sec |
hasAttribute attr3_cls3 first | 36003444.0 Ops/sec |
classList attr3_cls3 first | 37086264.0 Ops/sec |
hasAttribute attr4_cls4 first | 35703776.0 Ops/sec |
classList attr4_cls4 first | 37027956.0 Ops/sec |
hasAttribute attr5_cls5 first | 35787524.0 Ops/sec |
classList attr5_cls5 first | 37813688.0 Ops/sec |
hasAttribute attr6_cls6 first | 36646864.0 Ops/sec |
classList attr6_cls6 first | 37652084.0 Ops/sec |
hasAttribute attr7_cls7 first | 35881300.0 Ops/sec |
classList attr7_cls7 first | 37699080.0 Ops/sec |
hasAttribute attr8_cls8 first | 36037212.0 Ops/sec |
classList attr8_cls8 first | 37669864.0 Ops/sec |
hasAttribute attr9_cls9 first | 35827128.0 Ops/sec |
classList attr9_cls9 first | 37432036.0 Ops/sec |
hasAttribute attr10_cls10 first | 35969960.0 Ops/sec |
classList attr10_cls10 first | 37808820.0 Ops/sec |
hasAttribute attr11_cls11 first | 35758604.0 Ops/sec |
classList attr11_cls11 first | 37475424.0 Ops/sec |
hasAttribute attr12_cls12 first | 35598720.0 Ops/sec |
classList attr12_cls12 first | 36246516.0 Ops/sec |
hasAttribute attr13_cls13 first | 35771108.0 Ops/sec |
classList attr13_cls13 first | 37367908.0 Ops/sec |
hasAttribute attr14_cls14 first | 35596368.0 Ops/sec |
classList attr14_cls14 first | 37292844.0 Ops/sec |
hasAttribute attr15_cls15 first | 35739728.0 Ops/sec |
classList attr15_cls15 first | 37291260.0 Ops/sec |
hasAttribute attr16_cls16 first | 35952672.0 Ops/sec |
classList attr16_cls16 first | 37218912.0 Ops/sec |
hasAttribute attr17_cls17 first | 35943220.0 Ops/sec |
classList attr17_cls17 first | 37290360.0 Ops/sec |
hasAttribute attr18_cls18 first | 35971896.0 Ops/sec |
classList attr18_cls18 first | 37543512.0 Ops/sec |
hasAttribute attr19_cls19 first | 36072772.0 Ops/sec |
classList attr19_cls19 first | 37415608.0 Ops/sec |
hasAttribute attr20_cls20 first | 36044884.0 Ops/sec |
classList attr20_cls20 first | 37955464.0 Ops/sec |
hasAttribute attr2_cls2 last | 69978720.0 Ops/sec |
classList attr2_cls2 last | 37834204.0 Ops/sec |
hasAttribute attr3_cls3 last | 36205260.0 Ops/sec |
classList attr3_cls3 last | 31756776.0 Ops/sec |
hasAttribute attr4_cls4 last | 36324152.0 Ops/sec |
classList attr4_cls4 last | 31718548.0 Ops/sec |
hasAttribute attr5_cls5 last | 27750808.0 Ops/sec |
classList attr5_cls5 last | 26105566.0 Ops/sec |
hasAttribute attr6_cls6 last | 35795640.0 Ops/sec |
classList attr6_cls6 last | 31322912.0 Ops/sec |
hasAttribute attr7_cls7 last | 27925598.0 Ops/sec |
classList attr7_cls7 last | 25387124.0 Ops/sec |
hasAttribute attr8_cls8 last | 27747278.0 Ops/sec |
classList attr8_cls8 last | 24074662.0 Ops/sec |
hasAttribute attr9_cls9 last | 35405540.0 Ops/sec |
classList attr9_cls9 last | 31008758.0 Ops/sec |
hasAttribute attr10_cls10 last | 27863298.0 Ops/sec |
classList attr10_cls10 last | 25830404.0 Ops/sec |
hasAttribute attr11_cls11 last | 35298624.0 Ops/sec |
classList attr11_cls11 last | 30613394.0 Ops/sec |
hasAttribute attr12_cls12 last | 27894538.0 Ops/sec |
classList attr12_cls12 last | 25937322.0 Ops/sec |
hasAttribute attr13_cls13 last | 34731308.0 Ops/sec |
classList attr13_cls13 last | 29818994.0 Ops/sec |
hasAttribute attr14_cls14 last | 26755502.0 Ops/sec |
classList attr14_cls14 last | 25363096.0 Ops/sec |
hasAttribute attr15_cls15 last | 26524208.0 Ops/sec |
classList attr15_cls15 last | 25346686.0 Ops/sec |
hasAttribute attr16_cls16 last | 27401652.0 Ops/sec |
classList attr16_cls16 last | 25362172.0 Ops/sec |
hasAttribute attr17_cls17 last | 27385754.0 Ops/sec |
classList attr17_cls17 last | 25247076.0 Ops/sec |
hasAttribute attr18_cls18 last | 33871832.0 Ops/sec |
classList attr18_cls18 last | 29506828.0 Ops/sec |
hasAttribute attr19_cls19 last | 33510838.0 Ops/sec |
classList attr19_cls19 last | 27925926.0 Ops/sec |
hasAttribute attr20_cls20 last | 32891114.0 Ops/sec |
classList attr20_cls20 last | 28077466.0 Ops/sec |
This benchmark compares the performance of two different methods for checking the presence of values in HTML elements: classList.contains
and hasAttribute
. The tests are performed on a variety of HTML elements that have both class attributes and other data attributes.
hasAttribute(name)
Method:
id
attribute, and in some cases, other attributes (class
, a
, b
, etc.).classList.contains(className)
Method:
bar
, baz
, a
, b
, etc.).Performance:
id
attribute generally performed better than checking for some classes.hasAttribute
method, indicating that it may be more efficient under certain conditions (e.g., simpler elements).DOM Structure:
hasAttribute
.Element Count:
Using jQuery or Other Libraries:
.hasClass()
) specifically designed for class manipulations. They offer more extensive cross-browser compatibility and additional features but may add overhead compared to native methods.Custom Logic:
Using CSS Selectors via querySelector
:
document.querySelector
with a selector string. While clear and powerful, this may be slower for specific checks compared to the direct classList method.This benchmark provides insights into the relative performance of two commonly used JavaScript methods for checking class and attribute presence in the context of the DOM. The results highlight circumstances where one might be preferable to the other. Generally, classList.contains
is better when working directly with classes, while hasAttribute
is suited for broader checks across various attributes, with performance and use cases guiding the choice of one over the other.