7

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

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

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

jsperf.com 可靠吗?

你可以在这里看到测试:

http://jsperf.com/ghshshsrd

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

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

4

2 回答 2

2

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

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

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

于 2013-06-05T23:51:51.717 回答
0

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

-> http://jsperf.com/jquery-selector-performance-20130730

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

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

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

于 2013-07-30T20:51:30.933 回答