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倍。

Chrome在OSX10.7.6

这些不一定会给出相同的结果: find()会得到任何后代节点,而children()只会得到你匹配的直接子节点。

有一点, find()要慢很多,因为它必须search每个可能匹配的后代节点,而不仅仅是直接的子节点。 但是,这不再是事实。 由于使用本地浏览器方法, find()更快。

没有其他答案处理了使用.find(">") .children().find(">")search父元素的直接子元素的情况。 所以,我创build了一个jsPerftesting来找出 ,用三种不同的方法来区分孩子。

碰巧,即使使用额外的“>”select器, .find()仍然比.find()更快。 在我的系统上,10倍如此。

所以,从我的angular度来看,使用.children()的过滤机制根本没有太多的理由。

find()children()方法都用于过滤匹配元素的子元素,除了前者向下行进,后者向下行进一个级别。

为了简化:

  1. find() – 通过匹配元素的子元素,孙子元素,曾孙的元素来search各个层次。
  2. children() – 只search匹配元素的子元素(单个级别下)。