【发布时间】:2013-12-05 06:30:53
【问题描述】:
我有一种情况,我想知道在性能方面最好的方法是什么。
我有一个类名,我们称之为.class-test。 我还有一个缓存元素,$body。
我可以通过以下方式检索 .class-test 元素:
$('.class-test')
或通过
$body.find('.class-test')
在最坏的情况下,这些方法中的一种会胜过另一种吗?此外,如果有人可以通过第二种方法描述在幕后所做的事情,那就太好了(即我知道 .find 遵循 Sizzle,但如果元素被缓存,它是否已经存储了它的 DOM 元素树,那么它只需要遍历该子树即可找到该类?还是仅根据需要构建该树?)。
【问题讨论】:
-
在这里试试jsperf.com
-
除非您查找数千个元素,否则您永远不会注意到其中的差异。
-
是的,这就是我说最坏情况的原因。由于大多数 jQuery 性能指标依赖于使用数千个元素。我也很想知道第二种方法背后发生了什么。
-
很可能它是一个遍历每个选定元素的 foreach 循环,并且对于每个选定元素,它正在执行
element.getElementsByClassName("class-test")然后将它们作为一个唯一的元素集合连接起来。在您的示例中,差异将非常小,但是在缓存元素是比主体更精确的元素的较大示例中,性能差异可能更大。对此没有一般规则。根据具体情况并在多个浏览器中进行测试。
标签: javascript jquery sizzle