【发布时间】:2015-09-07 04:03:11
【问题描述】:
我进行了几次迭代的测试,以测试Document.querySelector 和Element.querySelector 的效率。
标记:
<form>
<input type="text" />
</form>
脚本:
查询 Document.querySelector
begin = performance.now();
var
i = 0,
iterations = 999999;
for ( i; i < iterations; i++ )
{
element = document.querySelector('[type="text"]');
}
end = performance.now();
firstResult = end - begin;
查询 Element.querySelector
begin = performance.now();
var
i = 0,
iterations = 999999,
form = document.querySelector('form');
for ( i; i < iterations; i++ )
{
element = form.querySelector('[type="text"]');
}
end = performance.now();
secondResult = end - begin;
日志:
console.log( firstResult ); // 703.7450000001118
console.log( secondResult ); // 1088.3349999999627
log 对我来说太棒了,因为我认为 Element.querySelector 只在元素的后代节点上查询,Document.querySelector 在当前文档的所有节点上查询,对吧?
为什么会得到这个结果?
【问题讨论】:
-
如果在表单中添加 1000 个兄弟节点,您可能会看到文档级别搜索的性能下降。
-
测试here,表明你的说法不正确
-
我不知道您的问题的答案,也不知道您的问题是否是一个好的基准,但每次调用 300 微秒的差异在现实生活中似乎并不值得担心。
-
是的,但是这个问题不是要求进行代码审查,也不是要求进行性能调整。它在问为什么一种方法比另一种方法快得多,这绝对是 SO 的范围。
-
因为他们并没有要求性能方面的帮助,所以他们说“函数 A 比函数 B 快,为什么?”。这就是这些功能如何实际工作的全部内容。这是一个SO类型的问题。我现在可以告诉你,这个问题将作为 Code Review 的题外话立即关闭。我们不做代码解释。
标签: javascript performance selector microbenchmark