【问题标题】:Does IE11 use a hash-table to optimize document.getElementById()?IE11 是否使用哈希表来优化 document.getElementById()?
【发布时间】:2018-11-05 15:15:23
【问题描述】:

IE11 是否使用哈希表来优化对document.getElementById() 的调用,或者如果没有,使用什么样的优化?我的逻辑是document.getElementById() 会被相当频繁地调用,并且对 DOM 树的完全遍历效率低下,因此对其进行优化是有意义的。

我询问的是特定浏览器和特定方法,以便我的问题得到解答。

【问题讨论】:

  • 我希望是这样,但我不知道去哪里看看它是否属实。通常,浏览器总是优化通过 ID 获取项目。事实上,甚至将 ID 附加到 window 对象是 Microsoft 的想法。这意味着如果您有一个 ID 为 myElement 的元素,您会找到一个带有所述元素的 window.myElement 条目。这后来被制定为标准。这来自 IE 的早期,它显示了优化访问的努力。我真诚地怀疑他们现在使用 IE11 进行全面扫描。
  • 是的,我想我们必须希望微软工程师偶然发现这个问题:)
  • 您可以生成两个具有不同DIV数量的不同页面。测量在两个页面上按 id 获取其中一个 DIV 所需的时间。如果在后台使用哈希表,则时间不应取决于 DIV 的数量。
  • 这里是 IE/Edge MVP。我会把它传递给团队,看看是否有人有任何见解!
  • 如果没有来自 Microsft 的评论,我不确定我们是否会知道这是如何发生的,但您可能想查看How does document.getElementById() search the DOM tree?,因为那里的答案涉及到一些细节。

标签: javascript internet-explorer-11 getelementbyid


【解决方案1】:

我认为是的。请检查此beautiful article 描述浏览器的内部结构。现在要在 IE11 中验证这一点,如果您检查窗口对象,您将看到 id 引用的控件。例如,而不是直接做一个

var control = document.getElementById("#id")

你可以直接做一个

var control = window["id"] 

并获得对元素的引用。

【讨论】:

  • 我想你的意思是window["id"]?尝试在 chrome 上运行。
  • 对不起,错字。编辑了答案。
  • 这并不能证明 IE 在内部使用哈希表处理了这个问题。 API != 实现细节
猜你喜欢
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 2017-04-13
  • 1970-01-01
  • 2015-11-27
  • 2021-01-16
相关资源
最近更新 更多