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

时间:2013-06-05 12:54:09

标签: jquery performance testing jquery-selectors jsperf

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

我使用firefox和chrome在jsperf上启动了测试。 结果很有趣: 使用firefox,第一个(普通选择器)慢40%(!!!)。 使用铬,第二个是慢0.84%。

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

jsperf.com可靠吗?

你可以在这里看到测试:

http://jsperf.com/ghshshsrd

我会测试其他浏览器,以获得乐趣。

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

2 个答案:

答案 0 :(得分:2)

正如其他人所指出的那样,两种陈述所得结果之间的差异可以忽略不计。即使testing the same statement twice,您也不太可能产生两个相同的Ops / sec值。

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

JSPerf对我来说一直很可靠 - 足以证明优化技术(this being a classic example)。

答案 1 :(得分:0)

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

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

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

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

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