代码之家  ›  专栏  ›  技术社区  ›  Mutation Person

在jquery中,哪个更快,是一个选择器,还是一个等价的函数,或者它依赖于什么?

  •  4
  • Mutation Person  · 技术社区  · 15 年前

    我经常想知道jquery中选择器和等效函数的用法。我指的是由返回相同结果集但构造不同的相同组件组成的语句。

    举个例子:

    alert($("#FundManager1>option").length);
    alert($("#FundManager1").find("option").length);
    

    (注:目的是提出两个相同的问题-如果这些问题不总是相同的,如果您能指出这一点,我将不胜感激)

    所以,在上面的例子中,在速度/性能上有什么真正的区别吗?显然,前者要短一些,因此上传/下载的字节会少一些,但我现在对这一点并不感兴趣。

    1 回复  |  直到 15 年前
        1
  •  5
  •   Douwe Maan    15 年前

    我会说第一个更快,因为它只解析一个CSS选择器,只查找子级,第二个必须解析两个,另外还要查找所有子级。

    但我不会为这么小的东西而烦恼。由于javascript在webkit和gecko中速度非常快,而在ie中速度仍然相对较快,因此没有人会注意到这种差异。


    从jquery中我可以看到/ Sizzle 源代码,两段代码在内部执行相同的操作。

    弗斯特 document.getElementById('FundManager1') 被执行(执行) 咝咝声 足够聪明知道这就是 #FundManager1 方法),然后搜索 option 使用它作为上下文。这两段代码之间的唯一区别是 > 选择器,导致 咝咝声 只搜索上下文的直接子代,而不是所有子代。我假设这样做更快,因为只需要探索一个级别的DOM层次结构。


    另一个编辑:

    上面的文本仅适用于不支持 document.querySelectorAll(css_selector) 方法!在浏览器中(webkit和gecko,可能是opera?)使用此方法代替 铁板 因此,所有的CSS选择器解析都是由浏览器本身完成的,而不是jquery框架,我确信这会更快。