我最近对选择器的性能很感兴趣,令我烦恼的是,当前实现选择器 API 的浏览器在简单的 #id
时不使用 document.getElementById
正在通过。
性能损失是 huge , 因此图书馆作者继续围绕这一点实现他们自己的方式。
有什么想法吗?
最佳答案
在做出上述评论后,我决定继续:
来自 Chromium 源中的 Node.cpp
if (strictParsing && inDocument() && querySelectorList.hasOneSelector() && querySelectorList.first()->m_match == CSSSelector::Id) {
Element* element = document()->getElementById(querySelectorList.first()->m_value);
if (element && (isDocumentNode() || element->isDescendantOf(this)) && selectorChecker.checkSelector(querySelectorList.first(), element))
return element;
return 0;
}
所以它确实映射到getElementById,只是解析字符串以寻找选择器是一项昂贵的操作。
关于javascript - 为什么 querySelector ('#id' ) 不映射到 document.getElementById ('id' )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4298504/