【问题标题】:Is getElementById() efficient? [duplicate]getElementById() 有效吗? [复制]
【发布时间】:2012-09-20 14:35:55
【问题描述】:

我经常在我的方法中使用方法getElementById("id1");。我用它来查找我的 HTML 中的某些元素。我想知道如果它每次都必须搜索整个 DOM,我是否需要关心我使用了多少。

这种方法是如何工作的?它是解析 DOM 并在找到元素时返回元素,还是以某种方式将所有这些值编入索引,从而能够更快地返回?

附:一般来说,我对这种方法很好奇,但如果这有什么不同,我会使用 Android WebView。

【问题讨论】:

  • 所以你不想使用jQuery?他们为你做到了。 getElementById("id1"); == $('#id1')
  • 我无法使用 jQuery 或其他导入的库。它必须是平淡无奇的 JavaScript。伤心吧?
  • 什么?!?!你可以使用javascript,但你不能使用javascript?
  • @Bondye:你什么意思? jQuery 并没有让它更快。它基本上归结为getElementById 加上构造一个集合等。
  • jQuery 会使事情变慢,因为它是另一个要加载的库。

标签: javascript html dom android-webview


【解决方案1】:

getElementById 非常快,您不必担心性能问题。

如果您一遍又一遍地(一遍又一遍地)使用同一个 ID,您可能需要缓存它。性能提升可以忽略不计:

var myId = getElementById("myId");
myId.operation1();
myId.operation2();
myId.andSome5000MoreCalls();

检查this SO answer 以获得一些基准。 Mike 发布的结果是:

IE8 getElementById:0.4844 毫秒
IE8 id 数组查找:0.0062 毫秒

Chrome getElementById:0.0039 毫秒
Chrome id 数组查找:0.0006 毫秒

Firefox 3.5 与 chrome 相当。

【讨论】:

  • 可忽略的(可以忽略的)!= 可忽略的(小到无法测量的)
  • 可以忽略不计?也许对于 Web 应用程序,但如果你开发一个 JS 游戏肯定不是!我觉得值得一提
  • 在具有深层次结构和众多节点的 DOM 树上执行基准测试会更有趣。
【解决方案2】:

事实上,getElementById 是访问 DOM 中元素的最快方式。索引取决于特定的浏览器,但这里有一个基准:

http://jsperf.com/getelementbyid-vs-everyone-else

【讨论】:

    【解决方案3】:

    有ID的元素确实是有索引的,通过DOM函数通过ID选择元素是最有效的选择方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 2013-05-25
      • 2013-06-16
      • 2011-05-18
      • 2012-04-10
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多