【问题标题】:Jquery: What's faster? .text() or .attr('id')?Jquery:什么更快? .text() 还是 .attr('id')?
【发布时间】:2011-06-11 16:43:53
【问题描述】:

只是想知道,其中哪一个会更快?

if ( $(this).text() == 'Test' )
{ 
    ...
}

if ( $(this).attr('id') == 'Test' )
{
    ...
}

或者有更快的方法吗?

还是两者都一样?

谢谢

【问题讨论】:

  • 我不确定您为什么将 text() 与 attr() 进行比较 - 它们是不相关的。 text 返回元素的内容,不包含 HTML,而 attr 是获取元素的属性,例如它的 id。在速度方面,直接更快。如果你能在汇编中做到这一点,它会更快:)
  • @Christian,我认为他可以选择将数据存储为文本或 ID。
  • 感谢您的投入!我只是在搞乱一些代码想法,试图理清我的工作流程:)

标签: jquery jquery-selectors performance


【解决方案1】:

目前最快的是this.id === 'Test',这是$(this).attr('id') == 'Test'的优化版本。

请注意,这使用了一个对象属性,而不是attr,以及精确的相等运算符===

请注意,检查 ID 会快得多,因为text()(取决于您的浏览器的功能)在内部循环遍历每个子节点并提取其文本值。检查 ID 只需要检查一个属性。

【讨论】:

    【解决方案2】:

    为了补充 lonesomeday 的答案,我要指出正确的答案很可能是“没关系”。如果是这样,那么您可能不应该在访问者的浏览器中运行这样的性能关键代码,并且他们可能会担心以这种方式使用他们的处理器时间;请记住,(客户端)JavaScript 无法在 您的 计算机上运行!

    【讨论】:

    • 感谢您的回复,没关系,没有运行性能太重的代码,只是想知道 :)
    【解决方案3】:

    一个简单的test 表明它们几乎同样快。 text() 似乎稍微快了一点。

    【讨论】:

    • 实际上,.attr(id) 在您的测试中更快,尽管只是略微。我以前也犯过同样的错误,但是报告的数字越大,速度越快。另外,当$(this)内的节点数超过1时,速度差异会被夸大。
    • 感谢您的链接,在发帖之前试图找到类似的东西;)我运行了测试,它说 .attr('id') 比 .text( )。
    • Box9 和大卫:奇怪。我在 Chrome 8 上让 text() 快了 7%(对于这个特定的测试)。是的,这只是在节点不包含任何子元素的情况下。子元素应该大大减慢 text() 的速度。
    猜你喜欢
    • 2011-05-14
    • 2012-06-14
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 2022-11-25
    相关资源
    最近更新 更多