假设没有任何疯狂的优化(我在看你,Chrome)。
我所说的是纯粹的、恶劣的、不修补就不会出问题的JavaScript v6成本。
下限为:
document.getElementById()
对比:
document.getElementsByTagName('div') lookup.
假设没有任何疯狂的优化(我在看你,Chrome)。
我所说的是纯粹的、恶劣的、不修补就不会出问题的JavaScript v6成本。
下限为:
document.getElementById()
对比:
document.getElementsByTagName('div') lookup.
getElementById
可以在现代浏览器中安全地假定为O(1)
,因为散列表是id => element映射的完美数据结构。
没有任何优化时,任何简单的查询(无论是css选择器、id查找、类名或标记名称查找)都不会比O(n)
差,因为只需要一次迭代遍历所有元素。
然而,在好的浏览器中,我希望它有一个标签名称=>元素映射,因此getElementsByTagName
也将是O(1)
。
getElementsByTagName
的时间复杂度为O(1),因为它返回的类型是HTMLCollection
,这个集合是实时的(也就是说,如果你往文档中添加了一个正确类型的新元素,你的HTMLCollection
会在背后自动更新),这表明它将直接指向浏览器的内部结构。另一方面,最近更流行的querySelectorAll
返回一个非实时的NodeList
,这意味着每次都需要创建一个新的类似数组的对象,使其至少为O(n)。(嗯,要不然插入操作就变得非常可怕了。) - Chris Morgan