我有一种情况,我想知道最好的方法是什么在性能方面。
我有一个班级名称,我们称之为 .class-test 。 我还有一个缓存元素 $ body 。
我可以通过以下方式检索.class-test元素:
$('.class-test')
或
$body.find('.class-test')
在最糟糕的情况下,其中一种方法是否胜过另一方?此外,如果有人可以通过第二种方法描述在幕后做什么会很棒(即我知道.find遵循Sizzle,但如果元素被缓存,它是否已经存储了其DOM元素的树,那么它只需要遍历那个子树来查找类?或者那棵树是否只根据需要构建?)。
答案 0 :(得分:0)
不同之处在于你可以说在DOM池中多少次。在第一个查询中,jQuery将从文档内部(顶层)进行搜索,然后向下遍历DOM树,检查每个级别,直到它到达最后,然后返回所有匹配元素。
在第二个选项中,您指定了起始点,因此不是从最顶部开始并向下运行,而是从body元素开始。在这种特殊情况下,你只是降低一级,但这是真正的优点,因为你有身体缓存,jquery不必发现它只能引用缓存的元素。
当您深入了解DOM树时,这可以节省大量时间。您可以节省10到100次等级检定。虽然你不会在小型网站上注意到这一点,但有一天你可能会使用企业级代码库来获得这些性能提升对你非常有益。