Javascript 哈希表是否比document.getElementById快?

Javascript 哈希表是否比document.getElementById快?,javascript,dom,Javascript,Dom,如果我有这样一个节点: <!-- lots of HTML here (including lots of nest unordered lists) --> <span id="spn123">Test</span> <!-- lots of html here --> [ /* lots of nodes here */ { 123 : 'Test' } /* lots of nodes here */ ]

如果我有这样一个节点:

    <!-- lots of HTML here (including lots of nest unordered lists) -->
    <span id="spn123">Test</span>
    <!-- lots of html here -->
[
 /* lots of nodes here */
 { 123 : 'Test' }
 /* lots of nodes here */ 
]
那么使用起来会更快吗

document.getElementById('spn123').innerText;

我假设这两者都是由浏览器本机处理的,并且都经过了非常优化,但是后者会因为其扁平结构和缺少额外的DOM膨胀而更快吗


谢谢

我认为你的问题的答案是,“没关系。”

我的想法是,正如评论者所建议的,您可能希望以某种方式对其进行基准测试


但是,如果我没有弄错的话,document.getElementById是在页面上选择单个元素的最快方法;除非您正在执行的操作数量非常多,否则应该没有必要尝试对其进行优化。

我认为您的问题的答案是:“没关系。”

我的想法是,正如评论者所建议的,您可能希望以某种方式对其进行基准测试


但是,如果我没有弄错的话,document.getElementById是在页面上选择单个元素的最快方法;除非您正在执行的操作数量非常多,否则不必尝试对其进行优化。

了解为什么同时具有对象和DOM表示可能会很有用。我假设散列是唯一的真值来源,DOM相应地呈现散列

我希望散列查找会更快,因为DOM可能会很慢,但是这主要是编写DOM,而不是读取DOM。我做了一个测试,结果因浏览器而异

在这些场景中,我喜欢创建一个函数来抽象实现,以便以后可以对其进行更改,而无需在代码中找到对查找的所有引用:

function getItem(id) {
    return hash[id];
}
如果以后找到一种更优化的方法来查找数据,只需更改该函数即可

更新:
我将jsperf更改为使用textContent,但这在较旧的浏览器中不起作用。

了解为什么同时使用对象和DOM表示可能会很有用。我假设散列是唯一的真值来源,DOM相应地呈现散列

我希望散列查找会更快,因为DOM可能会很慢,但是这主要是编写DOM,而不是读取DOM。我做了一个测试,结果因浏览器而异

在这些场景中,我喜欢创建一个函数来抽象实现,以便以后可以对其进行更改,而无需在代码中找到对查找的所有引用:

function getItem(id) {
    return hash[id];
}
如果以后找到一种更优化的方法来查找数据,只需更改该函数即可

更新: 我将jsperf更改为使用textContent,但这在较旧的浏览器中不起作用

但是,由于其扁平结构和缺少额外的DOM膨胀,后者会更快吗

除非其中一个明显比另一个慢,否则使用最有意义的一个。对象用于数据存储和检索(除其他外),DOM用于直观地显示它

因此,使用对象存储和检索数据,使用DOM以有意义的方式显示它

但是,由于其扁平结构和缺少额外的DOM膨胀,后者会更快吗

除非其中一个明显比另一个慢,否则使用最有意义的一个。对象用于数据存储和检索(除其他外),DOM用于直观地显示它


因此,使用对象进行数据存储和检索,使用DOM以有意义的方式显示它。

对其进行基准测试。它将取决于特定的DOM和JS实现。最后,这无关紧要:如果真是这样,算法本身可能应该重新考虑。(这两个用例都经过了很好的优化。另外,JavaScript对象不是哈希表;它们是映射。实现可能会选择在内部使用哈希。)除非您谈论数十亿次操作,否则差异将是微不足道的。如果你说的是数十亿次的操作,你可能在做一些奇怪的事情。所有的性能问题都应该通过运行精心设计的测试来回答,这些测试准确地衡量你在浏览器中关心的内容。其他任何东西都是纯粹的推测。innerText并不是所有正在使用的浏览器都支持的,因此对于某些浏览器来说,这将是无休止的缓慢。;-)好的,谢谢,我说的是成千上万的人,所以我会选择我喜欢的最后一个。RobG:哈哈,最近我被jQuery宠坏了,我直接把它输入SOBenchmark。它将取决于特定的DOM和JS实现。最后,这无关紧要:如果真是这样,算法本身可能应该重新考虑。(这两个用例都经过了很好的优化。另外,JavaScript对象不是哈希表;它们是映射。实现可能会选择在内部使用哈希。)除非您谈论数十亿次操作,否则差异将是微不足道的。如果你说的是数十亿次的操作,你可能在做一些奇怪的事情。所有的性能问题都应该通过运行精心设计的测试来回答,这些测试准确地衡量你在浏览器中关心的内容。其他任何东西都是纯粹的推测。innerText并不是所有正在使用的浏览器都支持的,因此对于某些浏览器来说,这将是无休止的缓慢。;-)好的,谢谢,我说的是成千上万的人,所以我会选择我喜欢的最后一个。RobG:Lol,最近我被jQuery给宠坏了,我只是直接把它输入到SOThat中,这就是我所想的-它最终都会在DOM中,但我宁愿使用平面哈希映射来查找它。hashmap在Chrome上速度较慢,在FF上速度相同,但在Safari上速度更快==>>没有结论。谢谢现在这是一个更好的答案。这就是我所想的——最终都会出现在DOM中,但我宁愿使用平面哈希映射来查找。哈希映射在Chrome上速度较慢,在FF上速度相同,但在Safari上速度更快==>>没有结论。谢谢现在这是一个更好的答案。