【问题标题】:performance of dom element vs jquery object [closed]dom元素与jquery对象的性能[关闭]
【发布时间】:2013-09-06 19:02:40
【问题描述】:

哪个更快

document.getElementsByName('tempName')[0].value

$('[name="tempName"]')[0].value

我想知道,因为我正在编写 js 代码,我是否必须在每次更改单个字段时使用它大约 10000 次,并且我想知道它对性能的影响。

【问题讨论】:

  • 了解自己:jsperf.com
  • 问题是它们不相等,你无法有意义地比较它们。 jQuery 的目的是规范化您在所有浏览器中与 DOM 的交互。在幕后,jQuery 所做的不仅仅是为您提供您的元素。您必须修改您的非 jQuery 示例以适用于甚至不支持 getElementsByName 的浏览器,以使这两个示例具有远程可比性。
  • 顺便说一句,在您的 jQuery 示例中,为什么不简单地使用 $('[name="tempName"]').val()
  • @meagar 在这种情况下 getElementsByName 即使在相当旧的版本(例如 IE 5.5)中也受支持:quirksmode.org/dom/w3c_core.html

标签: javascript jquery performance dom


【解决方案1】:

第一个。毫无疑问。不需要任何测试。


但是,您应该问自己的问题是:

  • 多少钱?
  • 真的很重要吗?
  • 您担心这些事情的应用程序有多大?
  • 为了如此微小的收益而牺牲可读性和跨浏览器支持是否值得?

如果您可以在不依赖 jQuery 的情况下做到这一点,那么您可以为自己和您的用户节省一些宝贵的字节。但是,如果您在页面的其他地方无论如何都需要 jQuery,我认为这样的摆弄不会对现实生活产生影响。


底线:您应该测试您的真实示例,而不仅仅是这一抽象线。原生 JavaScript 可能会更快,但如果它对您的应用没有影响,那何必呢?

【讨论】:

  • 以及哪一个提供更好的支持,给定。 getElementsByName 是我的意思的一个较差的例子,但仍然需要牢记。
  • 那么我能从小的性能损失中获得什么收益?
  • 这是一个 jsperf 给你:jsperf.com/by-name-test -- tl;dr pure JS 在 Chrome 中对我来说速度提高了 97%
  • 它很大。考虑一下,大约 50 个表单包含在一个 HTML 文档中,每个表单有大约 40 到 50 个数字字段……中间有繁琐的计算。
【解决方案2】:

第一个似乎更快。使用纯 JavaScript。

用 jsperf 测试:http://jsperf.com/performance-fsdfsd

【讨论】:

    【解决方案3】:

    纯 JavaScript 在这里应该运行得更快。所以这个是

    document.getElementsByName('tempName')[0].value
    

    【讨论】:

      猜你喜欢
      • 2014-01-02
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 2012-05-07
      • 2016-01-08
      相关资源
      最近更新 更多