代码之家  ›  专栏  ›  技术社区  ›  vsync

document.links使用jQuery查找链接是否更快?

  •  2
  • vsync  · 技术社区  · 16 年前

    这是不是更快:

    $(document.links).filter('a.someClass')
    

    而不仅仅是这个:

    $('a.someClass')
    

    ?

    我在jQuery的代码中没有看到 document.links
    这会让你立刻收集到文件上的链接,
    看起来,只在集合中进行筛选要快得多
    而不是所有的DOM节点,这是更多的节点去了。

    5 回复  |  直到 16 年前
        1
  •  4
  •   bobince    16 年前

    理论上,迭代 document.links

    • 不是你现在这样做的 filter

    • 文档.链接 不会给你完全一样的 $('a') links

    • 直接 $('a.someClass') 在现代浏览器中,因为该方法只会将控制权转移到浏览器自己的 document.querySelectorAll('a.someClass') ,这将比您或Sizzle自己嗅探DOM节点的速度快得多。

    (有一种方法比 querySelectorAll ,jQuery尚未使用: document.getElementsByClassName('someClass') . 再说一次,它只是在现代浏览器中,IE8没有它的地方 查询选择器all . 因为在实践中可能不值得太费心 查询选择器all 已经很快了。)

        2
  •  8
  •   Matt user129975    16 年前

    $(document.links).filter('a.someClass') 用672ms跑了1000次。

    $('a.someClass') 用了191毫秒跑了1000次。

    如果你这样做了

    $('a').filter('.someClass') filter 似乎是失去时间的地方。

    var x = $('.remove', document.links);

        3
  •  1
  •   Pointy    16 年前

    不要怀疑jQuery。很多人花了很多时间来加快速度。如果是这样的话 document.links 是找到 <a> 标签,然后Sizzle会自动为你做。

    $('a.someClass')
    

    $('.someClass')
    

    当你能用一个标签名来限定你的选择者时,你就更好了。发动机将使用 getElementsByTagName() 减少要扫描的节点数。

        4
  •  0
  •   Neil Aitken    16 年前

    我不熟悉sizzle选择器库是如何工作的,但我会怀疑你是如何工作的 $('a.someclass') jQuery将使用 document.getElementByTagName('A') 而不是遍历整个DOM。

        5
  •  0
  •   vsync    16 年前

    http://jsbin.com/ixiva3

    动态创建了1000个链接。 console.time

    结果表明 $("a.somelink") 是最快的。