【问题标题】:JQuery 1.3+ Selector PerformanceJQuery 1.3+ 选择器性能
【发布时间】:2011-11-21 15:38:35
【问题描述】:

我刚刚创建了一个 jquery 选择器性能测试页面。 http://guhelouis.github.com/jquery_performance/

有 10000 个 div,类名从 .div-cl-1 到 .div-cl-10000。我正在尝试使用 2 个不同的选择器获取 .div-cl-9999:

  • $('div.div-cl-9999)
  • $('.div-cl-9999')

您可能会猜到,第一个会比第二个快。但是,请在http://guhelouis.github.com/jquery_performance/ 中查看结果(按运行它按钮,抱歉,它有点慢),第一个结果总是第一个比第二个慢。

如果你在运行中颠倒顺序,意味着:

  • $('.div-cl-9999')
  • $('div.div-cl-9999)

结果又恢复正常了。

它是新的 jquery 选择器引擎中的某种“索引”吗?

PS:这些奇怪的结果仅在使用 jquery 1.3+ 时出现(JQuery 开始使用 Sizzle 的时间)。

【问题讨论】:

  • 是什么让你认为第一个选择器比第二个更快?第二个将在支持它的浏览器上使用getElementsByClassName()(相当快)。
  • @FrédéricHamidi:你是对的! (Y)...谢谢!

标签: javascript jquery performance selector


【解决方案1】:

两者都是不同的选择器。

$('div.div-cl-1') // select all div elements with class "div-cl-1" 

$('.div-cl-1') // select all elements with class "div-cl-1"

例如:第一个不会选择类似的东西

<p>
    <span class="div-cl-1">test</span>
</p>

编辑:刚刚发现这个 - http://jsperf.com/jquery-selector-speed-tests

【讨论】:

  • 这不是真的。 div.div-cl-1 代表&lt;div class='div-cl-1'&gt;(或者,你所说的“内部”是什么意思?)
【解决方案2】:

我不确定jQuery,但是如果你不指定指定类的标签名,css选择会更快,因为css首先查看类名,然后检查元素是否是指定的标签。假设 jQuery 使用浏览器的原生查询选择器或类选择器(如果存在),第一个选择器会更慢。

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 2011-01-05
    相关资源
    最近更新 更多