我测试了两个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可能会在第一次调用后存储该值。