jQuery选择器性能:一个奇怪的例子



我测试了两个ID选择器之间的差异,第一个是正常的:$('#lol')第二个是相同的,但放在多个括号之间:$((((('#lol')))))

我在firefox和chrome上对jsperf进行了测试。结果很有趣:在firefox中,第一个(普通选择器)要慢40% (!!)使用chrome浏览器,第二个速度慢0.84%。

为什么会有这样的差异?有人能解释一下吗?

jsperf.com可靠吗?

你可以在这里看到测试:

http://jsperf.com/lihshsrd

为了好玩,我将在其他浏览器上测试一下。

(编辑:顺便说一下,我在Mac OS X上)

正如其他人指出的那样,这两个语句得到的结果之间的差异可以忽略不计。即使测试同一语句两次,也不太可能产生两个相同的Ops/sec值。

还注意到你说的是"一个测试",而不是"多个测试"。如果结果看起来很奇怪,只需重复测试—不要忘记,如果您的浏览器在测试运行的过程中资源不足,可能会出现异常结果。

JSPerf对我来说一直是可靠的——足以用于演示优化技术(这是一个经典示例)。

实际上,这两种选择元素的方法并没有真正的区别(除了可读性不同)。我创建了一个新的jsperf测试用例,它更客观地度量这个用例:

-> http://jsperf.com/jquery -选择-性能- 20130730

为什么你的测试结果如此奇怪?更有可能是您的测试场景不准确,而不是两个测试之间的任何实际性能差异

您可以去并反转您的初始测试的测试顺序:首先检查代码$(((('#lol')))),然后是$('#lol')。我很肯定,你会得到与当前测试完全相反的结果;-)

我不是这方面的专家,但一方面,今天的浏览器非常聪明,会缓存javascript代码/变量。另外,jQuery可能会在第一次调用后存储该值。

最新更新