jQuery中最快的children()或find()是什么?
要在jQuery中select一个子节点,可以使用children(),也可以使用find()。
例如:
$(this).children('.foo');
给出了与以下相同的结果:
$(this).find('.foo');
现在,哪个选项最快或首选,为什么?
children()
仅查找节点的直接子节点,而find()
遍历节点下的整个DOM,所以children()
在给定等效实现时应该更快。 然而, find()
使用本地浏览器方法,而children()
使用在浏览器中解释的JavaScript 。 在我的实验中,典型情况下没有太大的性能差异。
要使用哪一个取决于你是否只想考虑DOM中的直接后代或者这个节点下面的所有节点,即根据你所期望的结果select合适的方法,而不是方法的速度。 如果性能确实是一个问题,那么试着find最好的解决scheme并使用它(或者看看其他答案中的一些基准)。
这个jsPerftesting表明find()更快。 我创build了一个更彻底的testing ,它仍然看起来好像find()胜过children()。
更新:根据tvanfosson的评论,我创build了16层嵌套的另一个testing用例 。 find()只有在find所有可能的div时比较慢,但find()在selectdiv的第一级的时候仍然优于children()。
当find()遍历超过100个嵌套级别和大约4000+个div时,children()开始优于find()。 这是一个基本的testing用例,但是在大多数情况下我仍然认为find()比children()更快。
我在Chrome开发人员工具中浏览了jQuery代码,注意到children()在内部调用了sibling(),filter(),并且比find()做了更多的正则expression式。
find()和children()满足不同的需求,但是在find()和children()会输出相同结果的情况下,我推荐使用find()。
这是一个可以运行性能testing的链接 。 find()
实际上比children()
快大约2倍。
这些不一定会给出相同的结果: find()
会得到任何后代节点,而children()
只会得到你匹配的直接子节点。
有一点, find()
要慢很多,因为它必须search每个可能匹配的后代节点,而不仅仅是直接的子节点。 但是,这不再是事实。 由于使用本地浏览器方法, find()
更快。
没有其他答案处理了使用.find(">")
.children()
或.find(">")
来仅search父元素的直接子元素的情况。 所以,我创build了一个jsPerftesting来找出 ,用三种不同的方法来区分孩子。
碰巧,即使使用额外的“>”select器, .find()
仍然比.find()
更快。 在我的系统上,10倍如此。
所以,从我的angular度来看,使用.children()
的过滤机制根本没有太多的理由。
find()
和children()
方法都用于过滤匹配元素的子元素,除了前者向下行进,后者向下行进一个级别。
为了简化:
-
find()
– 通过匹配元素的子元素,孙子元素,曾孙的元素来search各个层次。 -
children()
– 只search匹配元素的子元素(单个级别下)。